码迷,mamicode.com
首页 > 其他好文 > 详细

hdu2847(暴力)

时间:2014-11-01 06:14:54      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   ar   for   sp   

去年看的一道题目,但是竟然傻傻的用dfs+循环链表去做。 简直傻到爆。  不过现在做这题还是想了好久而且还有好几次WA,其实这题还是很水的。直接暴力枚举就行了,枚举的前提是要算好复杂度, 可以知道的是对于长度为n的01串,和化为二进制数长度为m的K,最多只要添加m个0or1就可以得到一个被k整除的数。 然后可以从k*1,k*2,k*3...往后枚举。 可知最多只需要枚举2^20次。 每次比较20次左右, 10^7的复杂度还是可以过得,因为数据组数小

hdu2847

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <queue>
#include <stdlib.h>
using namespace std;
#define N 100


char g[N];
int len;

int mcheck(int x)
{
    char tmp[N];
    int cnt=0;
    while(x)
    {
        tmp[cnt++]=x%2+0;
        x>>=1;
    }
    int tcnt=0;
    for(int i=cnt-1;i>=0;i--)
    {
        if(g[tcnt]==tmp[i])
        {
            tcnt++;
            if(tcnt==len) return 1;
        }
    }
    return 0;
}

int main()
{
    while(scanf("%s",g)!=EOF)
    {

        int k;
        len=strlen(g);

        scanf("%d",&k);

        if(g[0]==0)
        {
            //如果当是0的话还有点麻烦
            printf("0\n");
            continue;
        }
        int ans=-1;
        for(int i=k;;i+=k)
        {
            if(mcheck(i)==1)
            {
                ans=i;
                break;
            }
        }

        int cnt=0;
        int tmp[N];
        while(ans)
        {
            tmp[cnt++]=ans%2;
            ans>>=1;
        }
        for(int i=cnt-1;i>=0;i--)
            printf("%d",tmp[i]);
        printf("\n");
    }
    return 0;
}

 

hdu2847(暴力)

标签:style   blog   http   io   color   os   ar   for   sp   

原文地址:http://www.cnblogs.com/chenhuan001/p/4066305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!