Prime Path POJ--3126
来源:互联网 发布:python中文乱码解决sys 编辑:程序博客网 时间:2024/05/16 19:27
Prime Path
The ministers of the cabinet were quite upset by the message from the Chief of Security stating that they would all have to change the four-digit room numbers on their offices.
— It is a matter of security to change such things every now and then, to keep the enemy in the dark.
— But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know!
— I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old ones on your office door.
— No, it’s not that simple. Suppose that I change the first digit to an 8, then the number will read 8033 which is not a prime!
— I see, being the prime minister you cannot stand having a non-prime number on your door even for a few seconds.
— Correct! So I must invent a scheme for going from 1033 to 8179 by a path of prime numbers where only one digit is changed from one prime to the next prime.
Now, the minister of finance, who had been eavesdropping, intervened.
— No unnecessary expenditure, please! I happen to know that the price of a digit is one pound.
— Hmm, in that case I need a computer program to minimize the cost. You don't know some very cheap software gurus, do you?
— In fact, I do. You see, there is this programming contest going on... Help the prime minister to find the cheapest prime path between any two given four-digit primes! The first digit must be nonzero, of course. Here is a solution in the case above.
— It is a matter of security to change such things every now and then, to keep the enemy in the dark.
— But look, I have chosen my number 1033 for good reasons. I am the Prime minister, you know!
— I know, so therefore your new number 8179 is also a prime. You will just have to paste four new digits over the four old ones on your office door.
— No, it’s not that simple. Suppose that I change the first digit to an 8, then the number will read 8033 which is not a prime!
— I see, being the prime minister you cannot stand having a non-prime number on your door even for a few seconds.
— Correct! So I must invent a scheme for going from 1033 to 8179 by a path of prime numbers where only one digit is changed from one prime to the next prime.
Now, the minister of finance, who had been eavesdropping, intervened.
— No unnecessary expenditure, please! I happen to know that the price of a digit is one pound.
— Hmm, in that case I need a computer program to minimize the cost. You don't know some very cheap software gurus, do you?
— In fact, I do. You see, there is this programming contest going on... Help the prime minister to find the cheapest prime path between any two given four-digit primes! The first digit must be nonzero, of course. Here is a solution in the case above.
1033The cost of this solution is 6 pounds. Note that the digit 1 which got pasted over in step 2 can not be reused in the last step – a new 1 must be purchased.
1733
3733
3739
3779
8779
8179
One line with a positive number: the number of test cases (at most 100). Then for each test case, one line with two numbers separated by a blank. Both numbers are four-digit primes (without leading zeros).
One line for each case, either with a number stating the minimal cost or containing the word Impossible.
31033 81791373 80171033 1033
670
题意:给你两个四位数的素数n,m,n每一次只能变一个位上的数,变成另一个四位数的偶数,问最少经过几次才能变为m;
思路:这个一看就知道是广搜,在加一些剪枝,具体的看代码。
#include<stdio.h>#include<string.h>#include<queue>using namespace std;#include<math.h>int book[10000];int prime[10002];int n,m,flag;struct note{ int x; int step;};void prime1(){ int i,j; for( i=1001; i<10000; i+=2) { int k=sqrt(i); for(j=2; j<=k; j++) if(i%j==0) break; if(j>k) prime[i]=1; else prime[i]=0; }}void bfs(){ queue<note>Q; note now,tem; now.x=n; now.step=0; book[n]=1; Q.push(now); while(!Q.empty()) { now=Q.front(); Q.pop(); if(now.step==8779) printf("%d\n",now.step); if(now.x==m) { flag=1; printf("%d\n",now.step); break; } int i=3,j,a[10]; while(now.x) { a[i--]=now.x%10; now.x=now.x/10; } for(i=0; i<4; i++) { int s=a[i]; for(j=0; j<10; j++) { a[i]=j; int sum=a[0]*1000+a[1]*100+a[2]*10+a[3]; if(sum<1000||book[sum]||prime[sum]==0) continue; book[sum]=1; tem.x=sum; tem.step=now.step+1; Q.push(tem); } a[i]=s; } } return ;}int main(){ int t; prime1(); scanf("%d",&t); while(t--) { scanf("%d %d",&n,&m); memset(book,0,sizeof(book)); flag=0; bfs(); if(!flag) printf("Impossible.\n"); } return 0;}
阅读全文
0 0
- POJ 3126 Prime Path
- POJ 3126 Prime Path
- poj 3126Prime Path
- POJ -3126-Prime Path
- POJ 3126 Prime Path
- poj 3126 Prime Path
- POJ 3126 - Prime Path
- POJ 3126 Prime Path
- poj 3126 prime path
- POJ 3126 Prime Path
- Prime Path poj 3126
- POJ 3126 Prime Path
- poj 3126 Prime Path
- POJ 3126 Prime Path
- poj 3126 Prime path
- poj - 3126 - Prime Path
- POJ 3126 Prime Path
- POJ 3126 Prime Path
- 餐厅设计多少个餐位合适
- 将一个项目改成另一个项目时踩坑记录
- Java基础——Java中各个包的功能
- Hashtable和HashMap
- spring缓存(一)--内存缓存
- Prime Path POJ--3126
- MySQL中查看触发器trigger的方法
- 汽水瓶问题 C语言
- 170620考试
- MooseFS3.0分布式文件系统安装升级手记【开篇01】
- 百度机器学习笔试题
- bigint ,int ,smallint,tinyint
- 【面试常见问题】【C++】指针和引用的区别,有哪些不同点,细细道1
- namenode工作模式