| Task: | Alkuluvut |
| Sender: | anton_h |
| Submission time: | 2025-09-28 12:43:38 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 17 |
| #2 | ACCEPTED | 41 |
| #3 | ACCEPTED | 42 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2, 3 | details |
| #2 | ACCEPTED | 0.01 s | 2, 3 | details |
| #3 | ACCEPTED | 0.03 s | 3 | details |
Code
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
using vl=vector<ll>;
#define all(c) begin(c),end(c)
#define pb push_back
#define sz(c) ll((c).size())
#define FOR(i,a,b) for(ll i=(a);i<(b);i++)
#define TR(x) ({ if(1) cout << __LINE__ << ": " #x " = " << (x) << endl; })
// Only when needed
using dd = double;
const dd eps = 1e-10;
using vd = vector<dd>;
using vvd = vector<vd>;
using vvl = vector<vl>;
using i128 = __int128;
i128 modPow(i128 a, ll e, ll P) {
return (e%2 ? a : 1) * (e ? modPow(a*a%P, e/2, P) : 1) % P;
}
bool isPrime(ll P) {
if(P<=1) return 0;
ll lo=P-1;
while(lo%2 == 0) lo /= 2;
for(ll w : {2,325,9375,28178,450775,9780504,1795265022}) {
i128 v = modPow(w,lo,P);
if(v==1 || w%P == 0) continue;
for(ll r=lo;r != P-1 && v != P-1;r*=2) v = (v*v)%P;
if(v != P-1) return 0;
}
return 1;
}
void solve(){
ll k; cin >> k;
vl dig(k);
bool div3 = true, div_2_5 = true;
for(ll &d : dig){
cin >> d;
if(d % 3) div3 = false;
if(d % 2 && d % 5) div_2_5 = false;
}
if(div3){
if(dig == vl{3}){
cout << "YES\n" << 3 << "\n";
}else{
cout << "NO\n";
}
return;
}
if(div_2_5){
if(dig == vl{2} || dig == vl{5}){
cout << "YES\n" << dig[0] << "\n";
}else{
cout << "NO\n";
}
return;
}
if(sz(dig) == 1){
cout << "YES\n";
cout << (dig[0] == 1 ? 11 : dig[0]) << "\n";
return;
}
if(dig == vl{0, 7} || dig == vl{7, 0}){
cout << "NO\n";
return;
}
auto rng = mt19937_64((random_device())());
FOR(it, 0, 10000){
ll rem = 15 - k;
string ds;
for(ll d : dig) ds.push_back('0' + d);
while(rem > 0){
for(ll d : dig){
if(rng() % 2){
rem--;
ds.push_back('0' + d);
if(rng() % 6 == 0){
rem = 0;
}
}
if(rem == 0) break;
}
}
ll d3 = 0;
for(char c : ds) d3 += c - '0';
if(d3 % 3 == 0) continue;
FOR(it2, 0, 30){
shuffle(all(ds), rng);
if(ds[0] == '0') continue;
if((ds.back() -'0') % 2 == 0 || (ds.back() - '0') % 5 == 0) continue;
ll num = stoll(ds);
if(isPrime(num)){
cout << "YES\n";
cout << num << "\n";
return;
}
}
}
assert(false);
}
int main(int argc, char const *argv[])
{
cin.sync_with_stdio(0);
cin.tie(0);
ll tc; cin >> tc;
while(tc--) solve();
return 0;
}
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 ... Truncated |
Test 3
Group: 3
Verdict: ACCEPTED
| input |
|---|
| 848 4 0 1 2 3 4 0 1 2 4 ... |
| correct output |
|---|
| YES 10223 YES 4021 YES ... |
| user output |
|---|
| YES 2311120003 YES 424041210102401 YES ... Truncated |
