Submission details
Task:Alkuluvut
Sender:ollpu
Submission time:2025-09-26 22:34:17 +0300
Language:C++ (C++20)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.03 s1, 2, 3details
#20.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[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";
    }
}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
10
1
0
1
1
...

correct output
NO
YES
11
YES
2
...

user output
NO
YES
11
NO
YES
...

Test 2

Group: 2, 3

Verdict:

input
175
1
0
1
1
...

correct output
NO
YES
11
YES
2
...

user output
NO
YES
11
NO
YES
...

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)