QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#273794 | #7875. Queue Sorting | ucup-team992# | AC ✓ | 357ms | 34508kb | C++17 | 2.0kb | 2023-12-03 04:12:06 | 2023-12-03 04:12:07 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
typedef int uci;
#define int long long
#define F first
#define S second
#define ar array
const ll MOD = 998244353;
vector<ll> FACTS(1000);
ll modexp(ll n, ll p) {
ll r = 1;
ll m = n;
while(p) {
if(p&1) r = (r*m)%MOD;
m = (m*m)%MOD;
p >>= 1;
}
return r;
}
ll modinv(ll n) {
return modexp(n, MOD-2);
}
ll NCK(ll n, ll k) {
ll re = FACTS[n];
re = (re*modinv(FACTS[k]))%MOD;
re = (re*modinv(FACTS[n-k]))%MOD;
return re;
}
void solve(){
FACTS[0] = 1;
for(ll i = 1; i < FACTS.size(); i++)
FACTS[i] = FACTS[i-1]*i % MOD;
vector<vector<ll>> NCKS(1001, vector<ll>(2001));
for(ll i = 0; i < NCKS.size(); i++) {
NCKS[i][0] = 1;
for(ll j = 1; j <= i; j++) {
NCKS[i][j] = (NCKS[i][j-1] + NCK(i, j)) % MOD;
}
}
ll N; cin >> N;
vector<ll> A(N);
for(ll i = 0; i < N; i++) cin >> A[i];
vector<vector<ll>> DP(1000, vector<ll>(2000));
DP[0][0] = 1;
for(ll a = 1; a <= N; a++) {
for(ll nbp = 0; nbp <= 500; nbp++) {
for(ll d = -nbp; d <= A[a-1]; d++) {
ll max_placed = min(nbp, A[a-1] - 1 - d);
if(d == A[a-1]) {
(DP[a][nbp + d] += DP[a-1][nbp]) %= MOD;
} else {
ll mi_placed = max(0ll, -d);
ll m = NCKS[A[a-1]-d-1][max_placed];
if(mi_placed > 0) (m += MOD - NCKS[A[a-1]-d-1][mi_placed-1]) %= MOD;
(DP[a][nbp + d] += DP[a-1][nbp] * m) %= MOD;
}
}
}
}
/*for(ll a = 1; a <= N; a++) {
for(ll nbp = 0; nbp <= 500; nbp++) {
if(DP[a][nbp] > 0)
cout << a << " " << nbp << " " << DP[a][nbp] << endl;
}
}*/
cout << DP[N][0] << endl;
}
uci main(){
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
solve();
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 103ms
memory: 34508kb
input:
4 1 1 1 1
output:
14
result:
ok 1 number(s): "14"
Test #2:
score: 0
Accepted
time: 254ms
memory: 34468kb
input:
300 0 5 2 2 1 0 3 2 2 5 2 1 1 2 1 3 2 3 2 0 0 0 0 1 2 2 3 0 2 2 3 2 0 2 3 0 6 0 0 2 0 1 3 2 1 1 1 3 4 0 1 0 4 1 1 1 1 1 1 2 3 2 1 2 3 2 3 0 5 3 3 2 0 1 1 0 2 1 1 2 0 0 2 1 1 3 2 2 1 2 1 3 0 3 0 1 2 2 0 5 0 2 2 0 0 0 1 2 1 4 2 1 1 0 3 0 2 0 3 1 1 2 0 2 1 1 0 2 0 1 2 2 3 3 1 1 1 1 0 1 3 3 1 0 2 2 4 2 ...
output:
507010274
result:
ok 1 number(s): "507010274"
Test #3:
score: 0
Accepted
time: 357ms
memory: 34452kb
input:
500 1 1 0 2 1 0 2 3 2 0 0 2 0 2 1 1 0 0 1 1 1 2 1 1 1 0 1 1 2 2 1 4 0 2 1 0 2 3 1 0 1 1 0 2 1 2 2 1 0 0 3 1 4 1 1 2 1 1 0 1 3 1 2 0 0 0 2 1 2 0 0 3 2 1 1 1 1 1 2 1 0 1 0 0 0 1 0 0 2 1 1 0 1 0 1 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 2 1 1 0 1 1 0 1 1 0 0 1 0 3 1 3 0 0 2 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 2 0 0 ...
output:
7590964
result:
ok 1 number(s): "7590964"
Test #4:
score: 0
Accepted
time: 214ms
memory: 34500kb
input:
200 3 1 0 3 2 1 0 3 1 1 2 3 3 1 6 2 1 3 2 1 1 2 1 2 1 5 2 2 3 4 0 4 2 1 2 2 0 2 3 1 2 3 6 3 2 3 2 2 4 2 7 2 1 5 1 9 0 4 4 8 3 3 3 1 3 0 2 2 8 1 3 5 4 3 0 6 1 6 1 3 4 2 2 1 1 4 4 4 1 0 4 3 4 3 3 0 3 2 0 0 3 4 0 3 1 3 2 4 3 2 0 3 2 2 3 2 2 2 1 2 2 1 0 2 0 3 1 3 5 1 3 3 6 5 3 2 2 2 3 6 2 0 5 2 2 2 2 1 ...
output:
507844569
result:
ok 1 number(s): "507844569"
Test #5:
score: 0
Accepted
time: 156ms
memory: 34444kb
input:
100 4 8 2 5 4 4 3 0 2 7 2 3 4 4 1 2 3 4 4 4 3 3 3 3 3 2 4 1 3 5 5 1 4 6 1 1 1 3 2 3 2 1 0 1 4 4 2 4 2 5 3 5 1 6 2 3 3 1 4 4 4 1 4 4 3 4 2 0 2 3 6 1 3 3 5 4 1 1 2 3 0 3 2 2 1 3 3 2 5 6 3 2 3 3 5 4 2 3 4 4
output:
989550242
result:
ok 1 number(s): "989550242"
Test #6:
score: 0
Accepted
time: 110ms
memory: 34484kb
input:
1 1
output:
1
result:
ok 1 number(s): "1"
Test #7:
score: 0
Accepted
time: 355ms
memory: 34468kb
input:
500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
output:
1
result:
ok 1 number(s): "1"
Test #8:
score: 0
Accepted
time: 115ms
memory: 34468kb
input:
10 2 1 3 3 2 3 1 1 3 1
output:
165452340
result:
ok 1 number(s): "165452340"
Test #9:
score: 0
Accepted
time: 123ms
memory: 34448kb
input:
20 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0
output:
2
result:
ok 1 number(s): "2"
Test #10:
score: 0
Accepted
time: 123ms
memory: 34408kb
input:
20 0 0 1 0 0 0 0 1 0 0 0 0 0 0 2 0 1 0 0 0
output:
28
result:
ok 1 number(s): "28"
Test #11:
score: 0
Accepted
time: 114ms
memory: 34404kb
input:
10 1 1 1 1 1 1 1 1 1 1
output:
16796
result:
ok 1 number(s): "16796"
Test #12:
score: 0
Accepted
time: 254ms
memory: 34432kb
input:
300 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
output:
431279497
result:
ok 1 number(s): "431279497"
Test #13:
score: 0
Accepted
time: 120ms
memory: 34436kb
input:
2 232 268
output:
929717758
result:
ok 1 number(s): "929717758"
Test #14:
score: 0
Accepted
time: 108ms
memory: 34432kb
input:
1 500
output:
1
result:
ok 1 number(s): "1"
Test #15:
score: 0
Accepted
time: 108ms
memory: 34500kb
input:
3 155 180 165
output:
911108550
result:
ok 1 number(s): "911108550"
Extra Test:
score: 0
Extra Test Passed