結果
問題 | No.1707 Simple Range Reverse Problem |
ユーザー |
![]() |
提出日時 | 2021-10-16 11:24:40 |
言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,128 bytes |
コンパイル時間 | 2,696 ms |
コンパイル使用メモリ | 140,712 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-17 19:21:27 |
合計ジャッジ時間 | 2,976 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 18 |
ソースコード
#include <cassert>#include <cmath>#include <algorithm>#include <iostream>#include <iomanip>#include <limits.h>#include <map>#include <queue>#include <set>#include <string.h>#include <vector>using namespace std;typedef long long ll;void solver(int N, vector<int> &A) {if (A[0] != 1) {cout << "No" << endl;return;}for (int i = 1; i < 2 * N; ++i) {int x = i % N + 1;if (A[i] == x) continue;int from = i - 1;int y = A[from];int j = i;while (j < 2 * N && A[j] != y) {++j;}// fprintf(stderr, "%d: swap: (%d, %d)\n", x, i, j);if (j >= 2 * N) {cout << "No" << endl;return;}reverse(A.begin() + from, A.begin() + j + 1);if (A[i] != x) {cout << "No" << endl;return;}/*for (int v : A) {cout << v << " ";}cout << endl;*/}cout << "Yes" << endl;}int main() {int T;cin >> T;for (int i = 0; i < T; ++i) {int N;cin >> N;vector<int> A(2 * N);for (int j = 0; j < 2 * N; ++j) {cin >> A[j];}solver(N, A);}return 0;}