結果
| 問題 | No.1460 Max of Min |
| コンテスト | |
| ユーザー |
e869120
|
| 提出日時 | 2021-03-31 21:38:43 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,153 bytes |
| コンパイル時間 | 834 ms |
| コンパイル使用メモリ | 83,624 KB |
| 実行使用メモリ | 22,096 KB |
| 最終ジャッジ日時 | 2024-12-15 16:26:31 |
| 合計ジャッジ時間 | 76,994 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 88 WA * 3 |
ソースコード
#include <iostream>
#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
#pragma warning (disable: 4996)
long long N, K;
long long A[1 << 22], B[1 << 22];
int main() {
// Step #1. 入力
cin >> K >> N;
for (int i = 0; i < K; i++) cin >> A[i];
for (int i = 0; i < K; i++) cin >> B[i];
// Step #2. 愚直解
long long ti = clock(), rem = K - 1;
for (long long i = K; i <= min(N, (1LL << 21)); i++) {
A[i] = -(1LL << 60); rem = i;
for (int j = 0; j < K; j++) {
A[i] = max(A[i], min(B[j], A[i - K + j]));
}
if (i % 1000 == 0 && clock() - ti >= 19 * CLOCKS_PER_SEC / 10) {
break;
}
}
if (rem == N) {
cout << A[N] << endl;
return 0;
}
// Step #3. 周期を見る
long long pr = -1;
for (long long i = rem - 1; i >= K; i--) {
bool flag = false;
for (int j = 0; j < K; j++) {
if (A[rem - K + j] != A[i - K + j]) { flag = true; break; }
}
if (flag == false) { pr = rem - i; break; }
}
// Step #4. 答えを出力
long long idx = (rem - pr) + (N - rem) % pr;
cout << A[idx] << endl;
return 0;
}
e869120