K: Number Transformation
Description
In this problem, you are given a pair of integers A and B. You can transform any integer number A to B by adding x to A.This x is an integer number which is a prime below A.Now,your task is to find the minimum number of transformation required to transform S to another integer number T.
Input
Input contains multiple test cases.Each test case contains a pair of integers S and T(0< S < T <= 1000) , one pair of integers per line.
Output
For each pair of input integers S and T you should output the minimum number of transformation needed as Sample output in one line. If it’s impossible ,then print ‘No path!’ without the quotes.
Sample Input
5 7
3 4
Sample Output
Need 1 step(s)
No path!
我的思路:打素数表然后BFS(就是喜欢简单粗暴)
#include <bits/stdc++.h>
#define N 10100
#define INF 0x3f3f3f3f
#define LL long long
#define mem(a,n) memset(a,n,sizeof(a))
#define fread freopen("in.txt","r",stdin)
#define fwrite freopen("out.txt","w",stdout)
using namespace std;
const int prime[241]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
bool vis[1010];
int main()
{
// ios::sync_with_stdio(false);
queue<pair<int,int> > q;
int n,m,ans;
while(cin>>n>>m){
ans=0;
mem(vis,0);
while(!q.empty()){
q.pop();
}
q.push(make_pair(n,0));
while(!q.empty()){
int temp=q.front().first,tempcnt=q.front().second;
q.pop();
if(temp==m){
ans=tempcnt;
break;
}for(int i=0;i<241;++i){
if(prime[i]>=temp){
break;
}
if(temp+prime[i]<=m&&!vis[temp+prime[i]]){
q.push(make_pair(temp+prime[i],tempcnt+1));
vis[temp+prime[i]]=true;
}
}
}
if(ans){
printf("Need %d step(s)\n",ans);
}else{
cout<<"No path!"<<endl;
}
}
return 0;
}
/**********************************************************************
Problem: 1090
User: CSUzick
Language: C++
Result: AC
Time:68 ms
Memory:1700 kb
**********************************************************************/