Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
原来auto有毒!原先程序: #include<iostream> #include<cstdio> #include<vector> #include<cmath> #include<algorithm> #include<string> #include<set> #include<map> #include<ctime> #include<cstring> #include<cassert> #include<bitset> #include<sstream> #include<queue> using namespace std; int prime[10100],d[10100]; vector<int>a[10100],primes; int isValid(int x,int y) { int dif=0; for(int i=0;i<4;i++) { dif+=(x%10!=y%10); x/=10; y/=10; } return dif==1; } int main() { ios::sync_with_stdio(0); for(int i=1000;i<10000;i++) { prime[i]=1; for(int j=2;j*j<=i;j++) { if(i%j==0) { prime[i]=0; break; } } if(prime[i]) primes.push_back(i); } int x,y; for(auto x: primes) { for(auto y : primes) { if(isValid(x,y)) a[x].push_back(y); } } int times; cin>>times; while(times--) { int from,to; cin>>from>>to; memset(d,-1,sizeof d); queue<int> q; d[from]=0; q.push(from); while(!q.empty() && d[to]<0) { int x=q.front(); q.pop(); for(auto y :a[x]) { if(d[y]<0) { d[y]=d[x]+1; q.push(y); } } } cout<<d[to]<<endl; } return 0; } 苦思半天,找错后: #include<iostream> #include<cstdio> #include<vector> #include<cmath> #include<algorithm> #include<string> #include<set> #include<map> #include<ctime> #include<cstring> #include<cassert> #include<bitset> #include<sstream> #include<queue> using namespace std; int prime[10100],d[10100]; vector<int>a[10100],primes; int isValid(int x,int y) { int dif=0; for(int i=0;i<4;i++) { dif+=(x%10!=y%10); x/=10; y/=10; } return dif==1; } int main() { for(int i=1000;i<10000;i++) { prime[i]=1; for(int j=2;j*j<=i;j++) { if(i%j==0) { prime[i]=0; break; } } if(prime[i]) primes.push_back(i); } for(int i=0;i<primes.size();i++) { for(int j=0;j<primes.size();j++) { int x=primes[i]; int y=primes[j]; if(isValid(x,y)) a[x].push_back(y); } } int times; cin>>times; while(times--) { int from,to; cin>>from>>to; memset(d,-1,sizeof d); queue<int> q; d[from]=0; q.push(from); while(!q.empty() && d[to]<0) { int x=q.front(); q.pop(); for(int i=0;i<a[x].size();i++) { int y=a[x][i]; if(d[y]<0) { d[y]=d[x]+1; q.push(y); } } } cout<<d[to]<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator