QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#765836#9254. Random Variablespiggy123WA 3ms12404kbC++173.9kb2024-11-20 15:23:052024-11-20 15:23:05

Judging History

你现在查看的是最新测评结果

  • [2024-11-20 15:23:05]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:12404kb
  • [2024-11-20 15:23:05]
  • 提交

answer

#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll C[1005][1005],C2[1005],inv[1005],pw[1005],dp[1005][1005],MM;
const ll N=1000;

struct Mod
{
    ll m, p;
    void init(int pp) { m = ((__int128)1 << 64) / pp; p = pp; }
    ll operator ()(ll x)
    {
        return x - ((__int128(x) * m) >> 64) * p;
    }
} mod;

int main() {
	cin.tie(0);cout.tie(0);
	ios::sync_with_stdio(false);
	ll T;
	cin >> T >> MM;
	mod.init(MM);
	C[0][0]=1;
	for (ll i=1; i<=N; i++) {
		C[i][0]=1;
		for (ll j=1; j<=N; j++) {
			C[i][j]=mod(C[i-1][j]+C[i-1][j-1]);
		}
	}
	while (T--) {
		ll n,m;
		cin >> n >> m;
		C2[0]=1;
		vector<ll> vct;
		for (ll i=1;i<=n;i++){
			vct.push_back(m-i+1);
			ll z=i;
			for (ll &j:vct){
				if (z==1)break;
				ll g=__gcd(j,z);
				j/=g,z/=g;
			}
			C2[i]=1;
			for (ll j:vct)C2[i]*=j,C2[i]=mod(C2[i]);
		}
		ll ans=0;
		
		
		for (ll i=1;i<=n;i++){
			dp[0][0]=1;
			for(ll j=0;j<=min(n/(i+1),m);j++){
				for (ll k=1;k<=n;k++){
					dp[j][k]=mod(mod(dp[j][k-1]*j)+mod(k>=i+1&&j?mod(dp[j-1][k-i-1]*C[k-1][i])*j:0));
				}
				ll sm=0;
				pw[0]=1;
				for (ll i=1;i<=n;i++)pw[i]=mod(pw[i-1]*(m-j));
				for (ll k=0;k<=n;k++){
					sm+=mod(mod(dp[j][k]*C[n][k])*pw[n-k]);
					if (sm>=MM)sm-=MM;
				}
				if (j&1){
					ans-=mod(sm*C2[j]);
				}else{
					ans+=mod(sm*C2[j]);
				}
//				cout<<"!"<<sm<< endl;
				ans+=MM;
				if(ans>=MM)ans-=MM;
				if(ans>=MM)ans-=MM;
			}
//			cout<< ans<<"\n";
		}
		pw[0]=1;
		for (ll i=1;i<=n;i++)pw[i]=mod(pw[i-1]*m);
		cout<< mod(mod((n+1)*pw[n])-ans+MM)%MM<<"\n";
	}
	return 0;
}

/*
                                                                
 ■■■■■     ■■      ■■■     ■■■   ■    ■     ■     ■■■■    ■■■■  
 ■   ■■    ■■     ■  ■■   ■  ■■  ■    ■    ■■     ■  ■■  ■■  ■  
 ■    ■    ■■    ■    ■  ■    ■   ■  ■    ■■■    ■■  ■■  ■   ■■ 
 ■    ■    ■■    ■    ■  ■    ■   ■  ■     ■■    ■   ■■      ■■ 
 ■    ■    ■■    ■       ■         ■■      ■■        ■■      ■  
 ■   ■■    ■■    ■  ■■■  ■  ■■■    ■■      ■■       ■■     ■■■  
 ■■■■■     ■■    ■    ■  ■    ■    ■■      ■■      ■■        ■■ 
 ■         ■■    ■    ■  ■    ■    ■■      ■■     ■■          ■ 
 ■         ■■    ■    ■  ■    ■    ■■      ■■     ■      ■   ■■ 
 ■         ■■    ■■  ■■  ■■  ■■    ■■      ■■    ■       ■■  ■■ 
 ■         ■■      ■■■■    ■■■■    ■■      ■■    ■■■■■■   ■■■■  
*/

詳細信息

Test #1:

score: 100
Accepted
time: 2ms
memory: 12080kb

input:

3 123456789
3 2
5 5
7 7

output:

18
7145
2066323

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 3ms
memory: 12404kb

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:

wrong answer 1st lines differ - expected: '1', found: '-1'