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 }