先把代码挂上,有时间再补上题解
POJ 1426 Find The Multiple
#include<iostream> using namespace std; typedef long long ll; int main() { ll a; while(cin>>a&&a) { ll k=2; ll cmp=1; while(cmp%a) { ll b=k; ll cnt=1; cmp=0; while(b) { cmp+=(b&1)*cnt; cnt*=10; b>>=1; } k++; } cout<<cmp<<'\n'; } return 0; }
POJ 3126 Prime Path
纯暴力竟然过了???不可思议
#include<iostream> #include<cstring> #include<queue> #include<algorithm> using namespace std; const int MAXN=10005; bool prime[MAXN]; int Prime[MAXN]; bool vis[MAXN]; int num=0; int st,ed; int ans; struct state{ int num; int s1,s2,s3,s4; int step; }; void make_prime() { memset(prime,true,sizeof(prime)); prime[0]=prime[1]=false; for(int i=2;i<=MAXN;i++) { if(prime[i]) { Prime[num++]=i; } for(int j=0;j<num&&i*Prime[j]<MAXN;j++) { prime[i*Prime[j]]=false; if(!(i%Prime[j])) break; } } return; } void bfs() { memset(vis,false,sizeof(vis)); queue <state> q; state now,next; now.num=st; now.s1=st/1000; now.s2=(st/100)%10; now.s3=(st/10)%10; now.s4=st%10; now.step=0; vis[now.num]=true; q.push(now); while(!q.empty()) { now=q.front(); //cout<<now.num<<'\n'; if(now.num==ed) { cout<<now.step<<'\n'; return; } for(int i=1;i<=9;i++) { next.s1=i; next.s2=now.s2; next.s3=now.s3; next.s4=now.s4; next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4; next.step=now.step+1; if(prime[next.num]&&!vis[next.num]) { q.push(next); vis[next.num]=true; } } for(int i=0;i<=9;i++) { next.s1=now.s1; next.s2=i; next.s3=now.s3; next.s4=now.s4; next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4; next.step=now.step+1; if(prime[next.num]&&!vis[next.num]) { q.push(next); vis[next.num]=true; } } for(int i=0;i<=9;i++) { next.s1=now.s1; next.s2=now.s2; next.s3=i; next.s4=now.s4; next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4; next.step=now.step+1; if(prime[next.num]&&!vis[next.num]) { q.push(next); vis[next.num]=true; } } for(int i=0;i<=9;i++) { next.s1=now.s1; next.s2=now.s2; next.s3=now.s3; next.s4=i; next.num=next.s1*1000+next.s2*100+next.s3*10+next.s4; next.step=now.step+1; if(prime[next.num]&&!vis[next.num]) { q.push(next); vis[next.num]=true; } } q.pop(); } cout<<"Impossible\n"; return; } int main() { make_prime(); int n; cin>>n; while(n--) { cin>>st>>ed; bfs(); //cout<<ans<<'\n'; } return 0; }