結果
| 問題 |
No.689 E869120 and Constructing Array 3
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2018-05-18 22:47:56 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,647 bytes |
| コンパイル時間 | 2,174 ms |
| コンパイル使用メモリ | 199,784 KB |
| 最終ジャッジ日時 | 2025-01-05 10:38:23 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | WA * 13 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using int64 = long long;
const int INF = 1 << 30;
vector< bool > get_prime(int n) {
vector< bool > prime(n + 1, true);
if(n >= 0) prime[0] = false;
if(n >= 1) prime[1] = false;
for(int i = 2; i * i <= n; i++) {
if(prime[i]) {
for(int j = i + i; j <= n; j += i) prime[j] = false;
}
}
return (prime);
}
int main() {
int K;
cin >> K;
auto x = get_prime(2e6);
vector< int > st;
for(int i = 0; i < x.size(); i++) {
if(!x[i]) continue;
for(int j = 1; j < i; j++) {
int k = i - j;
bool t = false;
for(int l = 0; l < st.size(); l++) {
t |= x[st[l] + j];
t |= x[st[l] + k];
}
if(t) continue;
st.emplace_back(j);
st.emplace_back(k);
}
if(st.size() > 50) break;
}
if(K == 0) {
cout << 1 << endl;
cout << 1 << endl;
return 0;
}
vector< int > ans;
int ptr = 0;
while(K > 0) {
int best = 0, rest = 11451410;
for(int i = 1; i <= 250; i++) {
for(int j = 1; j <= 250; j++) {
if((K <= 10 || i * j >= K * 0.97) && i * j <= K) {
rest = min(rest, i + j);
}
}
}
for(int i = 1; i <= 250; i++) {
for(int j = 1; j <= 250; j++) {
if((K <= 10 || i * j >= K * 0.97) && i * j <= K && rest == i + j) {
for(int k = 0; k < i; k++) ans.emplace_back(st[ptr]);
for(int k = 0; k < j; k++) ans.emplace_back(st[ptr + 1]);
K -= i * j;
goto end;
}
}
}
end:;
ptr += 2;
}
cout << ans.size() << endl;
for(auto &x : ans) cout << x << " ";
cout << endl;
}
ei1333333