提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |