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;
}
#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;
}
相关文章推荐
- Tair ldb(leveldb存储引擎)实现介绍
- Spring MVC静态资源处理(转)
- 有用但偏僻的android资源
- Android SHA1与Package获取方式
- 几何求交点
- web前端响应式设计总结
- 修改 const 的值之后的奇怪变化
- 数列排序
- django 学习-17 Django会话Session
- 从一个页面跳转到tableBar相应的selectIndex时相应的方法
- 流API
- 【ITOO】DTO
- nefu 176 求总和
- 用OpenCV创建第一个图像
- com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
- ubuntu下使用锐捷客户端链接校园网
- STL中stack详解
- JavaWeb学习笔记(一)---Web相关知识和HTTP协议
- 配置临时环境变量
- FZUOJ 2150 Problem 2150 Fire Game (双起点BFS)