标签: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的复杂度还是可以过得,因为数据组数小
#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; }
标签:style blog http io color os ar for sp
原文地址:http://www.cnblogs.com/chenhuan001/p/4066305.html