結果
| 問題 | No.1369 交換門松列・竹 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-01-29 21:35:35 |
| 言語 | cLay (20241019-1 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 841 ms / 2,000 ms |
| コード長 | 1,382 bytes |
| 記録 | |
| コンパイル時間 | 2,567 ms |
| コンパイル使用メモリ | 177,448 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-05 14:59:25 |
| 合計ジャッジ時間 | 8,644 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 33 |
ソースコード
bool kado(int a, int b, int c) {
return ((a<b&&b>c)||(a>b&&b<c))&&(a!=c);
}
int N;
ll A[200010];
vector<int> notks;
bool tryk(int i, int k) {
int kmin = max(0, k-3);
int kmax = min(N-1, k+3);
int vmin, vmax, wmin, wmax;
for (int p = kmin; p <= kmax; ++p) {
if (i == p) continue;
vmin = max(0, p-6);
vmax = min(N-3, p+4);
wmin = max(0, i-6);
wmax = min(N-3, i+4);
swap(A[i], A[p]);
bool ok = true;
for (int v = vmin; v <= vmax; ++v) {
ok &= kado(A[v], A[v+1], A[v+2]);
}
for (int v = wmin; v <= wmax; ++v) {
ok &= kado(A[v], A[v+1], A[v+2]);
}
for (auto x : notks) {
wmin = max(0, x-6);
wmax = min(N-3, x+4);
for (int v = wmin; v <= wmax; ++v) {
ok &= kado(A[v], A[v+1], A[v+2]);
}
}
swap(A[i], A[p]);
if (ok) {
// cout << i << ' ' << p << endl;
// swap(A[i], A[p]);
// wt(A(N));
return true;
}
}
return false;
}
bool solve() {
rd(N);
rd(A(N));
notks.clear();
REP(i, N-2) {
if (!kado(A[i], A[i+1], A[i+2])) {
notks.push_back(i);
}
}
if (notks.size() > 10) {
return false;
}
REP(i, N) {
for (auto k : notks) {
if (tryk(i, k)) return true;
}
}
return false;
}
{
int T;
rd(T);
REP(i, T) {
if (solve()) {
wt("Yes");
}
else {
wt("No");
}
}
}