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

转载于:https://www.cnblogs.com/xiao-xin/articles/4166861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值