hdu2847(2009多校第四场) 01串添加最少01使被k整除(暴力)

要知道k倍数最多到2^20,然后暴力枚举On判断就好啦!

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[55],b[55];
 6 char s[55];
 7 int main()
 8 {
 9   int k,len,i,x,cnt,p,q,t;
10   while (~scanf("%s%d",s,&k))
11   {
12     len=strlen(s);
13     for (i=1;i<=len;i++)
14       a[i]=s[i-1]-'0';
15     if (s[0]=='0')
16     {
17       printf("0\n");
18       continue;
19     }
20     for (x=1;;x++)
21     {
22       t=x*k; cnt=0;
23       while (t!=0)
24       {
25         b[++cnt]=t%2;
26         t=t/2;
27       }
28       for (i=1;i<=cnt/2;i++)
29         swap(b[i],b[cnt+1-i]);
30       p=q=1; 
31       while (p<=len&&q<=cnt)
32       {
33         if (a[p]==b[q]) p++;
34         q++;
35       }
36       if (p>len)
37       {
38         for (i=1;i<=cnt;i++) printf("%d",b[i]);
39         printf("\n");
40         break;
41       }
42     }
43   }
44   return 0;
45 }
View Code

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2847

posted on 2014-12-16 12:57  xiao_xin  阅读(143)  评论(0编辑  收藏  举报

导航