結果

問題 No.1707 Simple Range Reverse Problem
コンテスト
ユーザー s
提出日時 2025-11-16 01:32:50
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 2,169 bytes
コンパイル時間 4,039 ms
コンパイル使用メモリ 254,492 KB
実行使用メモリ 7,852 KB
最終ジャッジ日時 2025-11-16 01:32:56
合計ジャッジ時間 5,228 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 6 WA * 13
権限があれば一括ダウンロードができます

ソースコード

diff #

#define _USE_MATH_DEFINES
#include  <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include<math.h>
#include<iomanip>
#include<stdio.h>
#include <stdlib.h>
#include<stdio.h>
#include <queue>
#include<map>
#include <fstream>
#include <sstream>
#include<set>
#include<stack>
#include<time.h>
#include <sys/types.h>
#include <tuple>
#include <numeric>
#include <iterator>
#include <atcoder/all>

#include <bits/stdc++.h>


#define rep(i,n) for (int i = 0; i < (n); ++i)
using namespace atcoder;
using namespace std;
typedef long long int ll;
typedef modint998244353 mint;




ll gcd(ll a, ll b) {
    if (a < b)swap(a, b);
    if (b == 0)return a;

    return gcd(b, a % b);
}
int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

/*
解説動画参考
解説ブログ参考


*/




int main()
{

    int Q;
    Q = 1;
    cin >> Q;   

    
    while (Q--) {
        int n;
        cin >> n;
        vector<int>p(2*n+1);
        vector<int>a(n+1), b(n+1);
        for (int i = 1; i <= n*2; i++)cin >> p[i];
        for (int i = 1; i <= n*2; i++) {
            if (!a[p[i]])a[p[i]] = i;
            else b[p[i]] = i;
            //cout << a[p[i]] << b[p[i]] << " ";
        }
        //cout << "#";
        bool f = 1;
        for (int i = 1; i <= n; i++) {
            if (p[i] == p[i + n]&&p[i]==i)continue;
            f = 0; break;
        }
        if (f) {
            cout << "Yes" << endl;
            continue;
        }
        f = 0;
        for (int i = 1; i < 2*n; i++) {
            if (b[p[i]] == i)continue;
            vector<int>t(2 * n + 1);
            t = p;
            int d = b[p[i]];
            int I = i;
            while(d>I) {
                swap(t[I], t[d]);
                d--; I++;
            }
            f = 1;
            //for (int j = 1; j <= 2 * n; j++)cout << t[j];
            //cout << endl;
            for (int j = 1; j <= n; j++) {
                if (t[j] == t[j + n]&&p[j]==j)continue;
                f = 0;
            }
            if (f)break;
        }
        if (f)cout << "Yes" << endl;
        else cout << "No" << endl;
        
    }

    return 0;
}
0