Submission #237783

#TimeUsernameProblemLanguageResultExecution timeMemory
237783DavidDamianLutrija (COCI19_lutrija)C++11
70 / 70
269 ms43756 KiB
#include <bits/stdc++.h>
using namespace std;
///Sieve of Eratosthenes
///Graph Theory
///BFS
///Determine an array that has prime difference between any two adjacent elements
int sieve[10000007];
vector<int> primes;
void computeSieve()
{
    int n=1e7+1;
    for(int i=4;i<=n;i+=2){
        sieve[i]=1;
    }
    primes.push_back(2);
    for(int i=3;i<=n;i+=2){
        if(sieve[i]==1) continue;
        primes.push_back(i);
        for(int j=i+i;j<=n;j+=i){
            sieve[j]=1;
        }
    }
}
typedef long long ll;
bool isPrime(ll n)
{
    if(n<2) return false;
    for(int p: primes){
        if((ll)p*(ll)p > n) break;
        if(n%p==0) return false;
    }
    return true;
}
ll A,B;
int d[8];
ll number[8];
int color[8];
int p[8];
vector<int> adjList[8];
int k=3;
void dfs(int u)
{
    color[u]=1;
    for(int v: adjList[u]){
        if(color[v]==0){
            p[v]=u;
            d[v]=d[u]+1;
            dfs(v);
        }
    }
}
int main()
{
    computeSieve();
    cin>>A>>B;
    number[1]=B;
    number[2]=A;
    number[3]=2;
    if(isPrime(A-2)) number[++k]=A-2;
    if(isPrime(A+2)) number[++k]=A+2;
    if(isPrime(B-2)) number[++k]=B-2;
    if(isPrime(B+2)) number[++k]=B+2;
    for(int i=1;i<=k;i++){
        for(int j=i+1;j<=k;j++){
            ll diff=abs(number[i]-number[j]);
            if(isPrime(diff)){
                adjList[i].push_back(j);
                adjList[j].push_back(i);
            }
        }
    }
    d[1]=1;
    dfs(1);
    if(d[2]==0){
        cout<<-1<<'\n';
        return 0;
    }
    cout<<d[2]<<'\n';
    int u=2;
    while(u!=1){
        cout<<number[u]<<" ";
        u=p[u];
    }
    cout<<number[1]<<'\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...