素数路

素数路

题目描述

已知一个四位的素数,要求每次修改其中的一位,并且要保证修改的结果还是一个素数,还不能出现前导零。你要找到一个修改数最少的方案,得到我们所需要的素数。
例如把1033变到8179,这里是一个最短的方案:
1033
1733
3733
3739
3779
8779
8179
修改了6次。

输入

1行,两个四位的素数(没有前导零),表示初始数和目标数。

输出

一个数,表示最少的操作次数。如果不可能,输出“Impossible”。

样例输入

1033 8179

样例输出

6bfs搜一下

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <queue>
#include <cstdio>
using namespace std;
typedef pair<int, int>P;
int a[3000], n = 0, x, y;

int ok(int n, int m){
    int cnt = 0;
    while(n > 0){
        if(n%10 == m%10) cnt++;
        n /= 10;
        m /= 10;
    }
    return cnt;
}
void init(){
      for(int i = 1000; i <= 10000; i++){
        int flag = 1;
        for(int j = 2; j*j <= i; j++){
            if(i % j == 0){
                flag = 0;
                break;
            }
        }
        if(flag){
            a[n++] = i;
        }
    }
}
int bfs(){
    int vis[10003];
    memset(vis, 0, sizeof(vis));
    queue<P>s;
    s.push(P(x, 0));
    vis[x] = 1;
    while(!s.empty()){
        P p = s.front();
        s.pop();
        if(y == p.first){
            return p.second;
        }
        for(int i = 0; i < n; i++){
            if(vis[a[i]] == 0 && ok(p.first, a[i]) == 3){
               // printf("%d\n", a[i]);
                vis[a[i]] = 1;
                s.push(P(a[i], p.second+1));

            }
        }
    }
    return -1;
}
int main()
{
    init();
    cin >> x >> y;
    int ans = bfs();
    if(ans == -1){
        printf("Impossible\n");
    }else printf("%d\n", ans);

    return 0;
}

我好菜啊

 
时间: 2024-08-24 05:01:05

素数路的相关文章

素数路(prime) (BFS)

问题 C: 素数路(prime) 时间限制: 1 Sec  内存限制: 64 MB提交: 8  解决: 5[提交][状态][讨论版] 题目描述 已知一个四位的素数,要求每次修改其中的一位,并且要保证修改的结果还是一个素数,还不能出现前导零.你要找到一个修改数最少的方案,得到我们所需要的素数. 例如把1033变到8179,这里是一个最短的方案: 1033 1733 3733 3739 3779 8779 8179 修改了6次. 输入 1行,两个四位的素数(没有前导零),表示初始数和目标数. 输出

素数路(prime)

素数路(prime) 题目描述 已知一个四位的素数,要求每次修改其中的一位,并且要保证修改的结果还是一个素数,还不能出现前导零.你要找到一个修改数最少的方案,得到我们所需要的素数. 例如把1033变到8179,这里是一个最短的方案:1033 1733 3733 3739 3779 8779 8179修改了6次. 输入 1行,两个四位的素数(没有前导零),表示初始数和目标数. 输出 一个数,表示最少的操作次数.如果不可能,输出“Impossible”. 样例输入 1033 8179 样例输出 6分

克最通月值得白真员工存段况外引dsym

家卫生健康委员会卫生应急办公室组织编制了公民卫生应急素养条目,并在"4·15全民国家安全教育日"发布.条目共12条,涉及突发公共卫生事件应对,突发事件紧急医学救援.中毒及核和辐射应急处置等基本知识和要求.期望通过发布公民卫生应急素养条目,进一步提高民众卫生应急素养,推进卫生应急社会参与工作,切实维护公民生命安全和身体健康. http://weibo.com/p2018_04_18.Pp/230927981149922743777879派褐麓记杂XWO琶追斡晾 http://weibo.

素数算法的优化之路

一.素数的定义 质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数.因为合数是由若干个质数相乘而得来的,所以,没有质数就没有合数,由此可见质数在数论中有着很重要的地位. 比如:2,3,5,7,9.....都是素数. 二.构造素数算法 写算法之前,先来说说以下这个东西: 对于任意一个合数n,如果它有两个质因子x,y,显然n = x*y, 所以,由不等式性质可得,x <= sqrt(n), 即 x <= n^(1/2). 推广一下,对于任意一个合数,

linux学习之路之加密类型及其相关算法

加密类型及其相关算法 随着互联网越演越烈,互联网上的各种攻击层出不穷,因此在互联网上相互传递的信息越来越不安全,因此为了防止用户在互联网上传递的数据被窃取,因此我们很有必须加强传递的数据的安全性. 数据的安全性主要包括以下三个方面: 数据的机密性:保证传递的数据不被读取 要想使传递的数据不被读取,可以对这些数据进行加密,因为默认这些数据是以明文来传递的 整个加密过程可以这么来理解: 加密:plaintext--->转换规则--->ciphertext 解密:ciphertext--->转

算法学习之路

原帖地址:http://blog.csdn.net/shenmen123456/article/details/6575647第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd.Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 

杭电 2189(母函数 素数 打表)

悼念512汶川大地震遇难同胞--来生一起走 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2366    Accepted Submission(s): 1185 Problem Description 妈妈 你别哭 泪光照亮不了 我们的路 让我们自己 慢慢的走 妈妈 我会记住你和爸爸的模样 记住我们的约定 来生一起走 上面这首诗节选

java学习之路之javaSE基础1

<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用举例 * 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔记本计算机.大型计算机等. * 应用举例 * 1:科学计算 * 2.数据处理 * 3.自动控制 *

ZSTU我的编程之路

浙江理工大学我的编程之路答案 语言:C/C++ 推荐编译器:Dev-C++ / CodeBlocks 严禁直接复制提交 作弊行为将会被ACM校队禁止入队 作者:JokerNoCry 1000: 送分题-A+B Problem #include <iostream> using namespace std; int main (){ int a,b; cin>>a>>b; cout<<a+b; } 零基础学C/C++ oj 题目1001--1199 1001: