hdu2847(暴力)

去年看的一道题目,但是竟然傻傻的用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
");
            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("
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/chenhuan001/p/4066305.html