ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#196377 | #2482. 序列 | tkswls | 100 | 331ms | 2740kb | C++11 | 1.7kb | 2023-10-24 09:10:15 | 2023-10-24 12:19:22 |
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
//用f[i][j][k]表示到了第i位,i位以外另外两种颜色的上一次出现位置,的方案总数
int n, m;
struct node {
int l, r, x;
} b[305];
int f[2][305][305], sum[2][305];
const int mod = 998244353;
vector<node> son[305];
inline bool check(int p, int u, int v) {
int op = 0;
for (int i = 0; i < son[p].size(); i++) {
op = 1;
if (u >= son[p][i].l) op++;
if (v >= son[p][i].l) op++;
if (op != son[p][i].x) return false;
}
return true;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
cin >> b[i].l >> b[i].r >> b[i].x;
son[b[i].r].push_back(b[i]);
}
f[0][0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= n; j++) {
for (int k = 0; k <= n; k++) {
f[i & 1][j][k] = 0;
}
}
for (int j = 0; j <= n; j++) {
sum[i & 1][j] = 0;
}
for (int j = 0; j < i; j++) {
for (int k = ((!j) ? 0 : j + 1); k < i; k++) {
if (check(i, j, k)) {
if (k == i - 1 && k) {
f[i & 1][j][k] = sum[!(i & 1)][j];
} else {
f[i & 1][j][k] = f[!(i & 1)][j][k];
}
}
sum[i & 1][j] += f[i & 1][j][k];
sum[i & 1][k] += f[i & 1][j][k];
if (j - k == 0) {
sum[i & 1][k] -= f[i & 1][j][k];
}
sum[i & 1][j] %= mod;
sum[i & 1][k] %= mod;
// cout << j << " " << k << ' ' << f[i & 1][j][k] << endl;
}
}
// cout << "=======\n";
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = (!i) ? 0 : i + 1; j < n; j++) {
if (i == 0 && j == 0) ans += f[n & 1][i][j] * 3;
else ans += f[n & 1][i][j] * 6;
ans %= mod;
}
}
cout << ans;
}
详细
小提示:点击横条可展开更详细的信息
Test #1:
score: 10
Accepted
time: 0ms
memory: 1344kb
input:
12 12 3 4 2 8 10 3 1 9 3 5 7 2 5 10 3 4 9 3 1 4 3 10 12 3 1 1 1 1 2 2 7 10 3 5 7 2
output:
4032
result:
ok single line: '4032'
Test #2:
score: 10
Accepted
time: 47ms
memory: 2708kb
input:
300 12 103 293 3 81 92 3 125 164 3 129 200 3 37 54 3 29 295 3 8 216 3 10 19 3 21 205 3 254 287 3 41 ...
output:
124537807
result:
ok single line: '124537807'
Test #3:
score: 10
Accepted
time: 43ms
memory: 2736kb
input:
300 300 53 54 2 106 109 2 219 221 2 205 210 2 267 274 2 113 119 2 206 209 2 79 81 2 201 208 2 206 20...
output:
287380185
result:
ok single line: '287380185'
Test #4:
score: 10
Accepted
time: 49ms
memory: 2736kb
input:
300 300 295 299 1 191 191 1 167 167 1 194 194 1 35 39 1 53 57 1 63 65 1 86 89 1 182 183 1 105 105 1 ...
output:
524111765
result:
ok single line: '524111765'
Test #5:
score: 10
Accepted
time: 47ms
memory: 2736kb
input:
300 300 53 54 2 106 109 2 219 221 2 205 210 2 267 274 2 113 119 2 206 209 2 79 81 2 201 208 2 206 20...
output:
931051581
result:
ok single line: '931051581'
Test #6:
score: 10
Accepted
time: 47ms
memory: 2740kb
input:
300 300 22 26 2 262 266 2 241 245 2 35 43 2 255 261 2 93 96 2 184 189 2 236 239 2 107 114 2 153 161 ...
output:
29541404
result:
ok single line: '29541404'
Test #7:
score: 10
Accepted
time: 0ms
memory: 1528kb
input:
50 50 20 27 3 13 16 2 31 31 1 22 27 3 3 31 3 12 45 3 17 34 3 17 22 3 8 37 3 23 46 3 26 35 3 24 34 3 ...
output:
586118159
result:
ok single line: '586118159'
Test #8:
score: 10
Accepted
time: 1ms
memory: 1528kb
input:
50 50 6 7 2 15 45 3 3 45 3 1 40 3 19 43 3 8 35 3 26 32 3 2 40 3 7 36 3 20 50 3 24 44 3 5 16 3 4 24 3...
output:
212281931
result:
ok single line: '212281931'
Test #9:
score: 10
Accepted
time: 49ms
memory: 2736kb
input:
300 300 46 146 3 76 177 3 176 282 3 85 157 3 12 182 3 75 200 3 186 192 3 176 226 3 219 284 3 47 277 ...
output:
309026097
result:
ok single line: '309026097'
Test #10:
score: 10
Accepted
time: 48ms
memory: 2736kb
input:
300 300 3 287 3 40 166 3 130 192 3 10 83 3 165 197 3 233 290 3 141 225 3 37 113 3 176 275 3 35 72 3 ...
output:
168965403
result:
ok single line: '168965403'
Extra Test:
score: 0
Extra Test Passed