2014
02-17

# Binary String

Give you a binary string, you can add some 1s or 0s at any places of the string. Then the result divide by K, and the remainder should be zero. Please print string of the result, if there are more, print the one with the smallest length, if still more, print the smallest lexicographical one. If there is no such result print impossible.

No more than 10 test cases. For each test case first line is a nonempty binary string whose length is no more than 20 and without leading zeros. Next line is an integer K(1 <= K <= 200).

No more than 10 test cases. For each test case first line is a nonempty binary string whose length is no more than 20 and without leading zeros. Next line is an integer K(1 <= K <= 200).

1000
4
11101
34
11010
70

1000
10101010
11010010

#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <deque>
#include <stack>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <limits.h>
#include <time.h>
#include <string.h>
using namespace std;

int lowbit(int t){return t&(-t);}
int countbit(int t){return (t==0)?0:(1+countbit(t&(t-1)));}
int gcd(int a,int b){return (b==0)?a:gcd(b,a%b);}
#define LL long long
#define PI acos(-1.0)
#define N  1010
#define MAX INT_MAX
#define MIN INT_MIN
#define eps 1e-8
#define FRE freopen("a.txt","r",stdin)

int main(){
char s[30];
char ss[30];
int n;
while(scanf("%s%d",s,&n)!=EOF){
int i,j,k;
int cnt;
int len=strlen(s);
int sum=0;
for(i=0;i<len;i++)sum=sum*2+s[i]-'0';
if( sum % n == 0){printf("%s\n",s);continue;}
else k=( sum / n + 1 )*n;
while(1){
int cur=k;//
cnt=0;
while(cur){
ss[cnt++]=cur%2+'0';
cur>>=1;
}
//ss[cnt]='\0';
int l=0,r=cnt-1;
while(l<len && r>=0){
if(s[l]==ss[r]){
l++;
r--;
}
else
r--;
}
if(l>=len)break;
k+=n;
}
for(i=cnt-1;i>=0;i--)
printf("%c",ss[i]);
puts("");
}
return 0;
}

1. 网站做得很好看，内容也多，全。前段时间在博客园里看到有人说：网页的好坏看字体。觉得微软雅黑的字体很好看，然后现在这个网站也用的这个字体！nice!