結果
| 問題 |
No.774 tatyamと素数大富豪
|
| ユーザー |
👑 tatyam
|
| 提出日時 | 2018-06-21 23:56:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,753 bytes |
| コンパイル時間 | 4,208 ms |
| コンパイル使用メモリ | 195,500 KB |
| 最終ジャッジ日時 | 2025-01-05 14:53:19 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 11 WA * 2 TLE * 1 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
#define rep(i,l,r) for(int i=(l);i<(r);i++)
#define fcout cout << fixed << setprecision(10)
array<int, 14> card;
bool is_prime(ll n){
if (n < 2) return false;
if (n < 4) {cout << n; return true;}
if (!(n % 2)) return false;
if (!(n % 3)) return false;
ll sq = sqrt(n);
for(int i = 5 ;; i += 4 - i % 6 / 2){
if (sq < i) {cout << n; return true;};
if (!(n % i)) return false;
}
}
ll putBack(ll a, int b){
return a * (b < 10 ? 10 : 100) + b;
}
bool ans(int n, ll cnt){
if(!n){
if(is_prime(cnt)) return true;
else return false;
}
if(n == 1) rep(i, 1, 14) if(card[i]){
if(ans(n - 1, putBack(cnt, i))) return true;
else return false;
}
for(int i = 9 ; i > 1 ; i--)if(card[i]){
card[i]--;
if(ans(n - 1, putBack(cnt, i))) return true;
card[i]++;
}
if(card[1]){
card[1]--;
for(int i = 9 ; i > 3 ; i--)if(card[i]){
card[i]--;
if(ans(n - 2, putBack(cnt, 10 + i))) return true;
card[i]++;
}
card[1]++;
}
for(int i = 3 ; i > -1 ; i--){
if(card[10 + i]){
card[10 + i]--;
if(ans(n - 1, putBack(cnt, 10 + i))) return true;
card[10 + i]++;
}
else if(card[1]){
card[1]--;
if(card[i]){
card[i]--;
if(ans(n - 2, putBack(cnt, 10 + i))) return true;
card[i]++;
}
card[1]++;
}
}
return false;
}
int main(){
int n, a;
cin >> n;
rep(i, 0, n){
cin >> a;
card[a]++;
}
if(!ans(n, 0))cout << -1;
}
tatyam