[HDU 1973]--Prime Path(BFS,素数表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1973
Prime Path
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
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.
1033
1733
3733
3739
3779
8779
8179
The 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.
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).
the minimal cost or containing the word Impossible.
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
int cur, step;
}now, Next;
int vis[], star, finish, prime[] = { , , };
void init(){
for (int i = ; i < ; i++){
if (!prime[i]){
for (int j = ; i*j < ; j++)
prime[i*j] = ;
}
}
}
int bfs(){
queue<node> Q;
vis[star] = ;
now.cur = star, now.step = ;
Q.push(now);
while (!Q.empty()){
int i, j;
char num[];
now = Q.front();
Q.pop();
if (now.cur == finish) return now.step;
for (i = ; i < ; i++){
sprintf(num, "%d", now.cur);
for (j = ; j < ; j++){
if (j == && i == )
continue;
if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j * + (num[] - '') * + (num[] - '') * + (num[] - '');
else if (i == )
Next.cur = j + (num[] - '') * + (num[] - '') * + (num[] - '') * ;
if (!prime[Next.cur] && !vis[Next.cur])
{
Next.step = now.step + ;
vis[Next.cur] = ;
Q.push(Next);
}
}
}
}
return -;
}
int main(){
int t, ans;
cin >> t;
init();
while (t--){
cin >> star >> finish;
memset(vis, , sizeof(vis));
ans = bfs();
if (ans == -) cout << "Impossible\n";
else cout << ans << endl;
}
return ;
}
其实这道题学校OJ(Swust OJ)也有但是坑爹的后台数据变成a+b的后台数据了,Orz~~~(无爱了)
[HDU 1973]--Prime Path(BFS,素数表)的更多相关文章
- hdu - 1195 Open the Lock (bfs) && hdu 1973 Prime Path (bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1195 这道题虽然只是从四个数到四个数,但是状态很多,开始一直不知道怎么下手,关键就是如何划分这些状态,确保每一个 ...
- hdu 1973 Prime Path
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1973 Prime Path Description The ministers of the cabi ...
- HDU - 1973 - Prime Path (BFS)
Prime Path Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- POJ3126 Prime Path (bfs+素数判断)
POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...
- poj 3126 Prime Path( bfs + 素数)
题目:http://poj.org/problem?id=3126 题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素 ...
- POJ 3126 Prime Path (BFS + 素数筛)
链接 : Here! 思路 : 素数表 + BFS, 对于每个数字来说, 有四个替换位置, 每个替换位置有10种方案(对于最高位只有9种), 因此直接用 BFS 搜索目标状态即可. 搜索的空间也不大. ...
- 【BFS】hdu 1973 Prime Path
题目描述: http://poj.org/problem?id=3414 中文大意: 使用两个锅,盛取定量水. 两个锅的容量和目标水量由用户输入. 允许的操作有:灌满锅.倒光锅内的水.一个锅中的水倒入 ...
- POJ 3126 Prime Path(素数路径)
POJ 3126 Prime Path(素数路径) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 The minister ...
- POJ 3216 Prime Path(打表+bfs)
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27132 Accepted: 14861 Desc ...
随机推荐
- Spring学习之Aop的各种增强方法
AspectJ允许使用注解用于定义切面.切入点和增强处理,而Spring框架则可以识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5一样的注解,但并没有使用AspectJ的 ...
- mysql 查询条件中文问题
这是mysql字符编码的问题,因为mysql默认的字符编码为latin1它并不识别中文,所以在读取查询语句时会出现乱码 从而使查询条件不正确所以我们只需要更改它的字符编码就可以一般都是用utf8 这里 ...
- nrf51 官方PWM库
地址:https://github.com/NordicSemiconductor/nrf51-pwm-library nrf_pwm_init函数 初始化PWM参数 设置输出pwm的gpio pin ...
- 转: sublime text常用插件和快捷键
Sublime Text 2是一个轻量.简洁.高效.跨平台的编辑器.博主之前一直用notepdd++写前端代码,用得也挺顺手了,早就听说sublime的大名,一直也懒得去试试看,认为都是工具用着顺手就 ...
- 关于Delphi中二维数组的声明和大小调整(对非基本类型数据,小心内存泄漏)
这是一个实例: procedure TMainForm.Button1Click(Sender: TObject);var arr:array of array of string;begin s ...
- curl 返回响应头
demo:/root# curl -i baidu.com HTTP/1.1 200 OK Date: Wed, 27 Jul 2016 08:50:03 GMT Content-Type: text ...
- Windows Azure HDInsight 现已正式发布!
今天,我们宣布正式发布 Windows Azure HDInsight 服务.HDInsight 是 Microsoft 提供的基于 Hadoop 的服务,为云提供 100% 的 Apache Had ...
- Qt 4.6: A Quick Start to Qt Designer
Qt 4.6: A Quick Start to Qt Designer A Quick Start to Qt Designer Using Qt Designer involves four ba ...
- GDI+入门——带你走进Windows图形的世界
一.GDI+基础 1.GDI+简单介绍 GDI+是微软的新一代二维图形系统,它全然面向对象,要在Windows窗口中显示字体或绘制图形必需要使用GDI+.GDI+提供了多种画笔.画刷.图像等图形对象, ...
- 【转】Ubuntu 上编译Android出现cannot find -lstdc++解决办法
[转]Ubuntu 上编译Android出现cannot find -lstdc++解决办法 在Ubuntu 12.04 x86_64机器上编译Android出现下面错误,是因为找不到32bit的li ...