您的位置:首页 > 其它

POJ1426

2016-01-17 22:10 211 查看
AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
using namespace std;

struct node{
int mod;
string ans;
}no[205];
int vis[205];

void bfs(int i){
memset(vis,0,sizeof(vis));
vis[1] = 1;
node cur;
queue<node> q;
int x,y;
cur.mod = 1;cur.ans = "1";
q.push(cur);
while(!q.empty()){
cur = q.front();
q.pop();
x = (cur.mod*10)%i;
y = (cur.mod*10+1)%i;

if(!x){
no[i].ans = cur.ans+"0";
return ;
}
if(!y){
no[i].ans = cur.ans+"1";
return ;
}

if(!vis[x]){
vis[x] = 1;
q.push(node{x,cur.ans+"0"});
}
if(!vis[y]){
vis[y] = 1;
q.push(node{y,cur.ans+"1"});
}
}
}

int main(){
no[1].ans = "1";
for(int i = 2; i <= 200; i++){
if(i % 2 == 0)
no[i].ans = no[i/2].ans+"0";
else
bfs(i);
}
int n;
while(scanf("%d",&n),n){
cout<<no
.ans<<endl;
}
return 0;
}


后发现所求解的最大值不超过long long,所以代码可简化为:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
using namespace std;

typedef long long ll;

void bfs(int n){
queue<ll>q;
q.push(1);
while(!q.empty()){
ll cur = q.front();
q.pop();
if(cur % n == 0){
printf("%lld\n",cur);
return ;
}
q.push(cur*10);
q.push(cur*10+1);
}
}

int main(){
int n;
while(scanf("%d",&n),n){
bfs(n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: