Submission details
Task:Alkuluvut
Sender:ollpu
Submission time:2025-09-26 22:51:45 +0300
Language:C++ (C++20)
Status:READY
Result:58
Feedback
groupverdictscore
#1ACCEPTED17
#2ACCEPTED41
#30
Test results
testverdicttimegroup
#1ACCEPTED0.03 s1, 2, 3details
#2ACCEPTED0.39 s2, 3details
#3--3details

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 3.2e6+1;
bool z[N];
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    vector<int> primes;
    for (int i = 2; i < N; ++i) {
        if (z[i]) continue;
        primes.push_back(i);
        for (int j = 2*i; j < N; j += i) z[j] = 1;
    }
    int T;
    cin >> T;
    for (int Ti = 0; Ti < T; ++Ti) {
        int k;
        cin >> k;
        int ds[10] {};
        for (int i = 0; i < k; ++i) {
            int d;
            cin >> d;
            ds[d] = 1;
        }
        // k = __builtin_popcount(Ti);
        // for (int i = 0; i < 10; ++i) ds[i] = !!(Ti & (1 << i));
        if (k == 1 && ds[1]) { cout << "YES\n11\n"; continue; }
        if (k == 1 && ds[2]) { cout << "YES\n2\n"; continue; }
        if (k == 1 && ds[3]) { cout << "YES\n3\n"; continue; }
        if (k == 1 && ds[5]) { cout << "YES\n5\n"; continue; }
        if (k == 1 && ds[7]) { cout << "YES\n7\n"; continue; }
        if (k == 2 && ds[0] && !ds[1]) { cout << "NO\n"; continue; }
        if (ds[0] + ds[3] + ds[6] + ds[9] == k) { cout << "NO\n"; continue; }
        int ld = 0;
        for (int x : {1, 3, 7, 9}) {
            if (ds[x]) ld = x;
        }
        if (!ld) { cout << "NO\n"; continue; }
        string num;
        for (int i = 0; i < 10; ++i) if (ds[i]) num.push_back('0'+i);
        for (int i = 0; i < 10; ++i) if (ds[i] && i != ld) { num.push_back('0'+i); break; }
        const int L = 13;
        while (num.size() < L) num.push_back('0'+ld);
        if (stol(num) % 3 == 0) {
            bool done = 0;
            for (int i = 0; i < 10; ++i) {
                if (ds[i] && (i-ld+9)%3) {
                    num[L-2] = '0'+i;
                    done = 1; break;
                }
            }
            if (!done) num.pop_back();
        }
        while (true) {
            random_shuffle(num.begin(), num.end()-1);
            if (num[0] == '0') continue;
            long n = stol(num);
            bool f = 1;
            for (int p : primes) {
                if (n % p == 0) {
                    f = 0; break;
                }
            }
            if (f) break;
        }
        cout << "YES\n";
        cout << num << "\n";
        cerr << "done" << endl;
    }
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
1
0
1
1
...

correct output
NO
YES
11
YES
2
...

user output
NO
YES
11
YES
2
...

Test 2

Group: 2, 3

Verdict: ACCEPTED

input
175
1
0
1
1
...

correct output
NO
YES
11
YES
2
...

user output
NO
YES
11
YES
2
...

Error:
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done
done

Test 3

Group: 3

Verdict:

input
848
4
0 1 2 3
4
0 1 2 4
...

correct output
YES
10223
YES
4021
YES
...

user output
(empty)