• Kattis之旅——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.

        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.

    Input

    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).

    Output

    One line for each case, either with a number stating the minimal cost or containing the word “Impossible”.

    Sample Input 1Sample Output 1
    3
    1033 8179
    1373 8017
    1033 1033
    
    6
    7
    0
    

    大致意思就是由前面的那个素数变到后面的那个素数,每次只能变一位数,变化后的数也应该是一个素数(无论是不是所求的数),求变化次数。

    直接BFS即可。

     //Asimple
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int maxn = 10000;
    ll n, m, s, res, ans, len, T, k;
    int x, y;
    int pr[maxn];
    
    int P(int n) {
        for(int i=2; i*i<=n; i++) {
            if( n%i==0 ) return 0;
        }
        return 1;
    }
    //将k位化0 
    int change(int n, int k) {
        char s[6] = {0};
        sprintf(s, "%d", n);
        s[k] = '0';
        sscanf(s, "%d", &n);
        return n;
    }
    
    int solve(int s, int e) {
        queue<int> q;
        int dis[maxn] = {0};
        q.push(s);
        dis[s] = 1;
        while( q.size() ) {
            s = q.front();
            q.pop();
            if( s == e ) return dis[s]-1;
            int t = 1000;
            for(int i=0; i<4; i++) {
                int k = change(s, i);
                for(int j=0; j<10; j++) {
                    int a = k+j*t;
                    if( pr[a]==1 && dis[a]==0 ) {
                        q.push(a);
                        dis[a] = dis[s]+1;
                    }
                }
                t /= 10;
            }
        }
        return -1;
    }
    
    void input() {
        for(int i=1000; i<maxn; i++) pr[i] = P(i);
        cin >> T;
        while( T -- ) {
            cin >> x >> y;
            ans = solve(x, y);
            if( ans==-1 ) puts("Impossible");
            else cout << ans << endl;
        }
    }
    
    int main(){
        input();
        return 0;
    }
  • 相关阅读:
    列举 spring 支持的事务管理类型?
    memcached 能够更有效地使用内存吗?
    Redis 集群方案什么情况下会导致整个集群不可用?
    详细描述一下 Elasticsearch 更新和删除文档的过程?
    Redis 常见性能问题和解决方案?
    如果有大量的 key 需要设置同一时间过期,一般需要注意什么?
    synchronized 和 ReentrantLock 的区别?
    Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
    memcached 最大的优势是什么?
    memcached 是原子的吗?
  • 原文地址:https://www.cnblogs.com/Asimple/p/6768925.html
Copyright © 2020-2023  润新知