提出 #41301769


ソースコード 拡げる

// O(2^N N^3)
#include <cassert>
#include <iostream>
#include <set>
#include <utility>
#include <vector>
using namespace std;

int gbit(int x, int b) { return (x >> b) & 1; }

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  int N, M;
  cin >> N >> M;

  vector<int> S(1 << N), T(1 << N), sorted(1 << N);
  int C[32][32];
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      C[i][j] = 0;
    }
  }

  for (int i = 0; i < (1 << N); i++) {
    int p = __builtin_popcount(i);
    S[i] = i;
    T[i] = ((1 << p) - 1) << (N - p);
    for (int a = 0; a < N; a++) {
      for (int b = a + 1; b < N; b++) {
        C[a][b] += gbit(S[i], a) and !gbit(S[i], b);
      }
    }
    sorted[i] = (S[i] == T[i]);
  }

  long long last = 1;
  vector<long long> dp(1 << N);
  for (int _ = 0; _ < M; _++) {
    int a, b;
    cin >> a >> b;
    a = (a + last) % N;
    b = (b + last + last) % N;
    assert(a != b);
    if (a > b) swap(a, b);

    if (C[a][b] == 0) {
      cout << last << "\n";
      continue;
    }
    for (int i = 0; i < (1 << N); i++) {
      if (gbit(S[i], a) and !gbit(S[i], b)) {
        for (int L = 0; L < a; L++) {
          if (gbit(S[i], L)) C[L][b]--, C[L][a]++;
        }
        for (int L = a + 1; L < b; L++) {
          if (gbit(S[i], L)) C[L][b]--;
        }
        for (int R = a + 1; R < b; R++) {
          if (!gbit(S[i], R)) C[a][R]--;
        }
        for (int R = b + 1; R < N; R++) {
          if (!gbit(S[i], R)) C[a][R]--, C[b][R]++;
        }
        C[a][b]--;

        S[i] ^= (1 << a) + (1 << b);
        sorted[i] = (S[i] == T[i]);
      }
    }
    fill(begin(dp), end(dp), 0LL);
    dp[0] = 1;
    for (int i = 0; i < (1 << N); i++) {
      if (!sorted[i]) continue;
      for (int j = 0; j < N; j++) {
        if (gbit(i, j)) continue;
        int k = i + (1 << j);
        dp[k] += dp[i];
      }
    }
    cout << (last = dp.back()) << "\n";
  }
}

提出情報

提出日時
問題 F - Count Sorted Arrays
ユーザ Nyaan
言語 C++ (GCC 9.2.1)
得点 900
コード長 2014 Byte
結果 AC
実行時間 190 ms
メモリ 8080 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 900 / 900
結果
AC × 3
AC × 87
セット名 テストケース
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_1_00.txt, 01_random_1_01.txt, 01_random_1_02.txt, 01_random_1_03.txt, 01_random_1_04.txt, 01_random_1_05.txt, 01_random_1_06.txt, 01_random_1_07.txt, 01_random_1_08.txt, 01_random_1_09.txt, 01_random_1_10.txt, 01_random_1_11.txt, 01_random_1_12.txt, 01_random_1_13.txt, 01_random_1_14.txt, 01_random_1_15.txt, 02_random_2_00.txt, 02_random_2_01.txt, 02_random_2_02.txt, 02_random_2_03.txt, 02_random_2_04.txt, 02_random_2_05.txt, 02_random_2_06.txt, 02_random_2_07.txt, 02_random_2_08.txt, 02_random_2_09.txt, 02_random_2_10.txt, 02_random_2_11.txt, 03_random_3_00.txt, 03_random_3_01.txt, 03_random_3_02.txt, 03_random_3_03.txt, 03_random_3_04.txt, 03_random_3_05.txt, 03_random_3_06.txt, 03_random_3_07.txt, 04_max_update_00.txt, 04_max_update_01.txt, 04_max_update_02.txt, 04_max_update_03.txt, 04_max_update_04.txt, 04_max_update_05.txt, 04_max_update_06.txt, 04_max_update_07.txt, 04_max_update_08.txt, 04_max_update_09.txt, 04_max_update_10.txt, 04_max_update_11.txt, 04_max_update_12.txt, 04_max_update_13.txt, 04_max_update_14.txt, 04_max_update_15.txt, 04_max_update_16.txt, 04_max_update_17.txt, 04_max_update_18.txt, 04_max_update_19.txt, 04_max_update_20.txt, 04_max_update_21.txt, 04_max_update_22.txt, 04_max_update_23.txt, 04_max_update_24.txt, 04_max_update_25.txt, 04_max_update_26.txt, 04_max_update_27.txt, 04_max_update_28.txt, 04_max_update_29.txt, 04_max_update_30.txt, 04_max_update_31.txt, 04_max_update_32.txt, 04_max_update_33.txt, 04_max_update_34.txt, 04_max_update_35.txt, 04_max_update_36.txt, 04_max_update_37.txt, 04_max_update_38.txt, 04_max_update_39.txt, 05_periodic_00.txt, 05_periodic_01.txt, 05_periodic_02.txt, 05_periodic_03.txt, 05_periodic_04.txt, 05_periodic_05.txt, 05_periodic_06.txt, 05_periodic_07.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 6 ms 3620 KiB
00_sample_01.txt AC 2 ms 3616 KiB
00_sample_02.txt AC 2 ms 3596 KiB
01_random_1_00.txt AC 13 ms 3496 KiB
01_random_1_01.txt AC 19 ms 3560 KiB
01_random_1_02.txt AC 148 ms 6888 KiB
01_random_1_03.txt AC 140 ms 6672 KiB
01_random_1_04.txt AC 110 ms 6040 KiB
01_random_1_05.txt AC 87 ms 3640 KiB
01_random_1_06.txt AC 168 ms 8040 KiB
01_random_1_07.txt AC 172 ms 8040 KiB
01_random_1_08.txt AC 72 ms 3604 KiB
01_random_1_09.txt AC 35 ms 3440 KiB
01_random_1_10.txt AC 130 ms 5360 KiB
01_random_1_11.txt AC 127 ms 5384 KiB
01_random_1_12.txt AC 86 ms 3596 KiB
01_random_1_13.txt AC 102 ms 3500 KiB
01_random_1_14.txt AC 162 ms 8076 KiB
01_random_1_15.txt AC 170 ms 8036 KiB
02_random_2_00.txt AC 86 ms 3572 KiB
02_random_2_01.txt AC 152 ms 5116 KiB
02_random_2_02.txt AC 87 ms 3504 KiB
02_random_2_03.txt AC 156 ms 4552 KiB
02_random_2_04.txt AC 86 ms 3560 KiB
02_random_2_05.txt AC 166 ms 5248 KiB
02_random_2_06.txt AC 86 ms 3644 KiB
02_random_2_07.txt AC 157 ms 4868 KiB
02_random_2_08.txt AC 158 ms 4992 KiB
02_random_2_09.txt AC 165 ms 5244 KiB
02_random_2_10.txt AC 93 ms 3508 KiB
02_random_2_11.txt AC 163 ms 5120 KiB
03_random_3_00.txt AC 143 ms 3900 KiB
03_random_3_01.txt AC 161 ms 7572 KiB
03_random_3_02.txt AC 146 ms 3796 KiB
03_random_3_03.txt AC 163 ms 8080 KiB
03_random_3_04.txt AC 144 ms 3816 KiB
03_random_3_05.txt AC 166 ms 7524 KiB
03_random_3_06.txt AC 147 ms 3924 KiB
03_random_3_07.txt AC 158 ms 8040 KiB
04_max_update_00.txt AC 187 ms 6016 KiB
04_max_update_01.txt AC 155 ms 5400 KiB
04_max_update_02.txt AC 186 ms 5952 KiB
04_max_update_03.txt AC 155 ms 5520 KiB
04_max_update_04.txt AC 187 ms 6008 KiB
04_max_update_05.txt AC 160 ms 5392 KiB
04_max_update_06.txt AC 190 ms 5776 KiB
04_max_update_07.txt AC 158 ms 5372 KiB
04_max_update_08.txt AC 149 ms 3800 KiB
04_max_update_09.txt AC 147 ms 5068 KiB
04_max_update_10.txt AC 149 ms 3904 KiB
04_max_update_11.txt AC 144 ms 5024 KiB
04_max_update_12.txt AC 150 ms 3812 KiB
04_max_update_13.txt AC 143 ms 5024 KiB
04_max_update_14.txt AC 150 ms 3824 KiB
04_max_update_15.txt AC 149 ms 5084 KiB
04_max_update_16.txt AC 142 ms 5108 KiB
04_max_update_17.txt AC 154 ms 3848 KiB
04_max_update_18.txt AC 143 ms 4984 KiB
04_max_update_19.txt AC 148 ms 3848 KiB
04_max_update_20.txt AC 144 ms 5112 KiB
04_max_update_21.txt AC 155 ms 3968 KiB
04_max_update_22.txt AC 142 ms 5220 KiB
04_max_update_23.txt AC 149 ms 3748 KiB
04_max_update_24.txt AC 144 ms 4352 KiB
04_max_update_25.txt AC 141 ms 4112 KiB
04_max_update_26.txt AC 145 ms 4252 KiB
04_max_update_27.txt AC 143 ms 4252 KiB
04_max_update_28.txt AC 182 ms 6116 KiB
04_max_update_29.txt AC 176 ms 6180 KiB
04_max_update_30.txt AC 181 ms 6284 KiB
04_max_update_31.txt AC 182 ms 6392 KiB
04_max_update_32.txt AC 178 ms 6196 KiB
04_max_update_33.txt AC 180 ms 6132 KiB
04_max_update_34.txt AC 182 ms 6008 KiB
04_max_update_35.txt AC 176 ms 6264 KiB
04_max_update_36.txt AC 186 ms 6268 KiB
04_max_update_37.txt AC 170 ms 6140 KiB
04_max_update_38.txt AC 181 ms 6148 KiB
04_max_update_39.txt AC 180 ms 6388 KiB
05_periodic_00.txt AC 101 ms 4904 KiB
05_periodic_01.txt AC 47 ms 3564 KiB
05_periodic_02.txt AC 137 ms 6148 KiB
05_periodic_03.txt AC 81 ms 3760 KiB
05_periodic_04.txt AC 86 ms 3600 KiB
05_periodic_05.txt AC 87 ms 3600 KiB
05_periodic_06.txt AC 167 ms 8076 KiB
05_periodic_07.txt AC 170 ms 8072 KiB