QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#556338 | #9254. Random Variables | forgive_ | WA | 3ms | 11592kb | C++14 | 1.2kb | 2024-09-10 17:00:35 | 2024-09-10 17:00:35 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std ;
typedef long long LL ;
const int N = 1010 ;
// 妙妙题
// 容斥可以完成这个计数
// 观察dp式子,m每减1,n会减k,所以复杂度是 n/k 的
int T , mod ;
LL C[N][N] ;
unordered_map<int,LL> f[N] ;
int K , n , m ;
LL dp( int n , int m ) // n个不同小球放入 m 个箱子,要求每个箱子中球数 <= K
{
if( n < 0 ) return 0 ;
if( m == 0 ) return 1 ;
if( n == 0 ) return 1 ;
if( f[n].count(m) ) return f[n][m] ;
// printf("f[%d][%d] = %lld\n" , n , m , f[n][m] ) ;
return f[n][m] = m*( dp(n-1,m) - dp(n-K-1,m-1)*C[n-1][K]%mod ) % mod ;
// return f[n][m] ;
}
int main()
{
scanf("%d%d" , &T , &mod ) ;
for(int i = 0 ; i <= 1000 ; i ++ ) {
C[i][0] = 1 ;
for(int j = 1 ; j <= i ; j ++ ) {
C[i][j] = ( C[i-1][j] + C[i-1][j-1] ) % mod ;
}
}
while( T -- ) {
scanf("%d%d" , &n , &m ) ;
LL sum = 0 , pw = 1 ;
for( K = 1 ; K < n ; K ++ ) {
for(int i = 0 ; i <= n ; i ++ ) f[i].clear() ;
sum = ( sum + dp(n,m) ) % mod ;
// printf("K = %d , (%d,%d) = %lld\n" , K , n , m , dp(n,m) ) ;
pw = pw * m % mod ;
}
pw = pw * m % mod ;
printf("%lld\n" , (pw*n%mod - sum + mod ) % mod ) ;
}
return 0 ;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 11136kb
input:
3 123456789 3 2 5 5 7 7
output:
18 7145 2066323
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 11592kb
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: 11452kb
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 0 1 2 0 1 2 0 1 2 0 0 2 0 0 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0 2 0 1 2 0 1 2 0 1 0 1 0 2 2 0 2 2 0 2 1 2 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 1 2 0 0 2 2 0 2 2 0 2 2 0 0 0 0 0 0 0 0 0 0 2 0 1 2 0 1 2 0 1
result:
wrong answer 21st lines differ - expected: '0', found: '2'