QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#662644 | #9254. Random Variables | KiharaTouma | WA | 3ms | 12824kb | C++14 | 1.9kb | 2024-10-21 08:21:45 | 2024-10-21 08:21:45 |
Judging History
answer
//qoj9254
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
typedef long long ll;
int T, n;
ll m, P, f[N][N], C[N][N], ans;
struct Mod{
ll m, p;
void init(int pp){
m = ((__int128)1 << 64) / pp;
p = pp;
}
ll operator ()(ll x){
if(p == 2){
return x & 1;
}
return x - ((__int128(x) * m) >> 64) * p;
}
} mod;
ll qp(ll x, ll y){
ll ans = 1;
while(y){
if(y & 1){
ans = mod(ans * x);
}
x = mod(x * x);
y >>= 1;
}
return ans;
}
int main(){
scanf("%d%lld", &T, &P);
n = 1000;
mod.init(P);
C[0][0] = 1;
for(int i = 1; i <= n; ++ i){
C[i][0] = 1;
for(int j = 1; j <= i; ++ j){
C[i][j] = C[i-1][j] + C[i-1][j-1];
if(C[i][j] >= P){
C[i][j] -= P;
}
}
}
while(T--){
ans = 0;
scanf("%d%lld", &n, &m);
for(int k = 0; k < n; ++ k){
f[0][0] = 1;
for(int i = 1; i <= n; ++ i){
f[i][i/(k+1)+1] = 0;
for(int j = 0; j * (k + 1) <= i; ++ j){
f[i][j] = mod(f[i-1][j] * (m - j));
if(i >= k + 1 && j){
ll tmp = mod(f[i-k-1][j-1] * (m - j + 1));
tmp = mod(tmp * C[n-(i-k)][k]);
f[i][j] -= tmp;
if(f[i][j] < 0){
f[i][j] += P;
}
}
}
}
for(int j = 0; j * (k + 1) <= n; ++ j){
ans += f[n][j];
f[n][j] = 0;
if(ans >= P){
ans -= P;
}
}
}
printf("%lld\n", mod(- ans + P + n * qp(m, n)));
}
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 3ms
memory: 12488kb
input:
3 123456789 3 2 5 5 7 7
output:
18 7145 2066323
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 2ms
memory: 12624kb
input:
100 2 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 10 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5 10 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6 10 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 7 10 8 1 8 2...
output:
1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0
result:
ok 100 lines
Test #3:
score: -100
Wrong Answer
time: 0ms
memory: 12824kb
input:
100 3 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 10 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 3 10 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 4 10 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 5 10 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6 10 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 7 10 8 1 8 2...
output:
1 2 3 1 2 3 1 2 3 1 2 3 3 2 3 3 2 3 3 2 3 3 3 3 3 3 3 3 3 3 1 2 3 1 2 3 1 2 3 1 2 2 3 2 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 1 3 3 1 3 3 1 3 3 1 2 2 3 2 2 3 2 2 3 2 3 3 3 3 3 3 3 3 3 3 1 2 3 1 2 3 1 2 3 1
result:
wrong answer 3rd lines differ - expected: '0', found: '3'