| ||||||||||
| 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 | |||||||||
提交G++CE,C++就AC,附代码#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
const int N = 10001;
int prime[N],visit[N],cost[N];
void init()
{
memset(prime, 0, sizeof(prime));
for(int i = 2; i*i <= N; ++i)
{
if(!prime[i])
for(int j = i*i; j <= N; j += i)
prime[j] = 1;
}
}
int bfs(int a, int b)
{
queue<int>q;
q.push(a);
memset(visit, 1, sizeof(visit));
memset(cost, 0, sizeof(cost));
visit[a] = 0;
cost[a] = 0;
while(!q.empty())
{
int in,out = q.front();
q.pop();
for(int i = 1; i < 5; ++i)
{
if(i==1)
for(int j = 1; j < 10; ++j)
{
in = j*1000+out%1000;
if(visit[in]&&!prime[in])
{
if(in==b)return cost[out]+1;
visit[in] = 0;
q.push(in);
cost[in] = cost[out]+1;
}
}
else
{
int site1 = 1,site2 = 1;
for(int k = 4; k > i; --k)
site1 *= 10;
for(int k = 5-i; k > 0; --k)
site2 *= 10;
for(int j = 0; j < 10; ++j)
{
in = j*site1+out%site1+out/site2*site2;
if(visit[in]&&!prime[in])
{
if(in==b)return cost[out]+1;
visit[in] = 0;
q.push(in);
cost[in] = cost[out]+1;
}
}
}
}
}
return -1;
}
int main()
{
int t,a,b;
init();
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &a,&b);
if(a==b)
{
printf("0\n");
continue;
}
int ans = bfs(a, b);
if(ans==-1)printf("Impossible\n");
else printf("%d\n", ans);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator