提出 #38260304


ソースコード 拡げる

// g++ t.cpp -std=c++14 -I .
#include <iostream>
#include <string>
#include <map>
#include <random>
//#include <atcoder/all>
using namespace std;
using ll = long long;
const int INF = 1e9;
const int M = 998244353;
using P = pair<int, pair<int, int>>;
template<class S, class T> void chmin(S& a, T b) {if (a>b) a=b;}
template<class S, class T> void chmax(S& a, T b) {if (a<b) a=b;}
template<class S, class T> void addMod(S& a, T b) {a=(a+b)%M;}
//int up[]={0,0,1,-1}, lf[]={1,-1,0,0};
int up[]={2,1,-1,-2,-2,-1,1,2}, lf[]={1,2,2,1,-1,-2,-2,-1};

random_device rng;
int an[320][320];
int mp[5000][10000];

int main() {
  int _; cin>>_; while(_-->0) {
    int n;cin>>n;
    int a[n],b[2*n];for(int i=0;i<n;i++)cin>>a[i];for(int i=0;i<n;i++)cin>>b[i];for(int i=0;i<n;i++)b[n+i]=b[i];
    fill(mp[0],mp[n],-1);

    bool ans = true;

    for(int i=0;i<n;i++) {
      if (a[i] != b[i]) ans = false;
    }
    if (ans == true) {
      cout<<"Yes"<<endl;
      continue;
    }

    for(int i=0;i<n;i++) {
      int dp[n+1][2];fill(dp[0], dp[n+1], i); // {a[i]のi, a[i]を1つ以上捨てたか} -> b[i]のiの最大値
      for(int j=0;j<=n;j++) dp[j][0]=i, dp[j][1]=-1;

      for(int j=0;j<n;j++) {
        int k = j;
        int bi0 = dp[j][0];
        int bi1 = dp[j][1];

        if (mp[k][bi0] == -1) {
          int bi = bi0; //cout<<" "<<a[k]<<" =? "<<b[bi]<<endl;
          while(bi < 2*n && a[k] == b[bi]) bi++;
          for(int l=bi0;l<bi;l++) {
            mp[k][l] = bi;
          }
          chmax(dp[j+1][0], bi);
          if (bi >= i+n && j != n-1) ans = true;
        } else {
          chmax(dp[j+1][0], mp[k][bi0]);
          if (mp[k][bi0] >= i+n && j != n-1) ans = true;
        }

        if (j>0 && bi1>=0 && mp[k][bi1] == -1) {
          int bi = bi1;
          while(bi < 2*n && a[k] == b[bi]) bi++;
          for(int l=bi1;l<bi;l++) {
            mp[k][l] = bi;
          }
          chmax(dp[j+1][1], bi);
          if (bi >= i+n) ans = true;
        } else {
          chmax(dp[j+1][1], mp[k][bi1]);
          if (mp[k][bi1] >= i+n) ans = true;
        }

        chmax(dp[j+1][1], dp[j][0]);

        //cout<<i<<" "<<j<<" "<<dp[j][0]<<" "<<dp[j][1]<<" "<<ans<<endl;

        if (ans) break;
      }
        //cout<<i<<" "<<n<<" "<<dp[n][0]<<" "<<dp[n][1]<<" "<<ans<<endl;
      if (ans) break;
    }
    if (ans) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
  }
}

提出情報

提出日時
問題 C - Roller
ユーザ Personify20
言語 C++ (GCC 9.2.1)
得点 500
コード長 2473 Byte
結果 AC
実行時間 555 ms
メモリ 199012 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 1
AC × 60
セット名 テストケース
Sample example_00.txt
All example_00.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 7 ms 3680 KiB
test_00.txt AC 3 ms 3560 KiB
test_01.txt AC 555 ms 199012 KiB
test_02.txt AC 204 ms 114472 KiB
test_03.txt AC 214 ms 117864 KiB
test_04.txt AC 16 ms 15520 KiB
test_05.txt AC 284 ms 138916 KiB
test_06.txt AC 52 ms 46908 KiB
test_07.txt AC 2 ms 3548 KiB
test_08.txt AC 22 ms 3528 KiB
test_09.txt AC 32 ms 3760 KiB
test_10.txt AC 34 ms 3748 KiB
test_11.txt AC 35 ms 3700 KiB
test_12.txt AC 33 ms 3664 KiB
test_13.txt AC 33 ms 3628 KiB
test_14.txt AC 32 ms 3800 KiB
test_15.txt AC 31 ms 3860 KiB
test_16.txt AC 32 ms 3860 KiB
test_17.txt AC 34 ms 3912 KiB
test_18.txt AC 32 ms 3924 KiB
test_19.txt AC 32 ms 3736 KiB
test_20.txt AC 33 ms 3784 KiB
test_21.txt AC 36 ms 3660 KiB
test_22.txt AC 34 ms 3668 KiB
test_23.txt AC 33 ms 3784 KiB
test_24.txt AC 97 ms 53692 KiB
test_25.txt AC 262 ms 150588 KiB
test_26.txt AC 188 ms 104936 KiB
test_27.txt AC 243 ms 140464 KiB
test_28.txt AC 192 ms 117340 KiB
test_29.txt AC 34 ms 3916 KiB
test_30.txt AC 32 ms 3864 KiB
test_31.txt AC 34 ms 3932 KiB
test_32.txt AC 35 ms 3980 KiB
test_33.txt AC 28 ms 3860 KiB
test_34.txt AC 410 ms 198880 KiB
test_35.txt AC 407 ms 198996 KiB
test_36.txt AC 408 ms 198996 KiB
test_37.txt AC 411 ms 199000 KiB
test_38.txt AC 416 ms 199000 KiB
test_39.txt AC 338 ms 198876 KiB
test_40.txt AC 526 ms 198924 KiB
test_41.txt AC 465 ms 198944 KiB
test_42.txt AC 533 ms 198996 KiB
test_43.txt AC 245 ms 198932 KiB
test_44.txt AC 511 ms 199012 KiB
test_45.txt AC 520 ms 198984 KiB
test_46.txt AC 541 ms 198952 KiB
test_47.txt AC 514 ms 198880 KiB
test_48.txt AC 512 ms 199008 KiB
test_49.txt AC 127 ms 198884 KiB
test_50.txt AC 131 ms 198940 KiB
test_51.txt AC 130 ms 198936 KiB
test_52.txt AC 128 ms 198816 KiB
test_53.txt AC 131 ms 198876 KiB
test_54.txt AC 34 ms 7300 KiB
test_55.txt AC 34 ms 7336 KiB
test_56.txt AC 35 ms 7448 KiB
test_57.txt AC 36 ms 7340 KiB
test_58.txt AC 38 ms 7496 KiB