QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#733940 | #9572. Bingo | ucup-team134 | TL | 326ms | 7884kb | C++17 | 2.7kb | 2024-11-10 22:15:51 | 2024-11-10 22:15:51 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=998244353;
int add(int x,int y){x+=y;return x>=mod?x-mod:x;}
int sub(int x,int y){x-=y;return x<0?x+mod:x;}
int mul(int x,int y){return (ll)x*y%mod;}
void ckadd(int &x,int y){x=add(x,y);}
void cksub(int &x,int y){x=sub(x,y);}
const int N=400050;
int F[N],I[N];
int binom(int n,int k){
return mul(F[n],mul(I[k],I[n-k]));
}
int c[N];
vector<int> vls;
void precalc(int n,int m){
for(int k=0;k<=n*m;k++)c[k]=0;
vls.clear();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int now=mul(binom(n,i),binom(m,j));
int sm=(n-i)*(m-j);
if((i+j)%2==0)ckadd(c[sm],now);
else cksub(c[sm],now);
}
}
for(int k=0;k<=n*m;k++)if(c[k]!=0)vls.push_back(k);
}
int SolveInclusionExclusion(int cnt){
int ans=0;
for(int j=(int)vls.size()-1;j>=0;j--){
int sm=vls[j];
if(sm<cnt)break;
ckadd(ans,mul(binom(sm,cnt),c[sm]));
}
return ans;
}
int Solve(int n,int m,int cnt){
vector<vector<int>> dp(n+1,vector<int>(m+1,0));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i*j>=cnt){
dp[i][j]=binom(i*j,cnt);
for(int a=0;a<=i;a++){
for(int b=0;b<=j;b++){
if(a==0 && b==0)continue;
if(a==i && b!=j)continue;
if(b==j && a!=i)continue;
cksub(dp[i][j],mul(dp[i-a][j-b],mul(binom(i,a),binom(j,b))));
}
}
}
}
}
return dp[n][m];
/*if(cnt>n*m)return 0;
if(n>m)swap(n,m);
int ans=binom(n*m,cnt);
for(int i=1;i<=n;i++){
int now=mul(Solve(n-i,m,cnt),binom(n,i));
if(i%2==1)cksub(ans,now);
else ckadd(ans,now);
}
return ans;*/
}
int main(){
F[0]=1;
for(int i=1;i<N;i++)F[i]=mul(F[i-1],i);
I[0]=I[1]=1;
for(int i=2;i<N;i++)I[i]=mul(mod-mod/i,I[mod%i]);
for(int i=1;i<N;i++)I[i]=mul(I[i-1],I[i]);
int t;
scanf("%i",&t);
while(t--){
int n,m;
scanf("%i %i",&n,&m);
precalc(n,m);
vector<int> a(n*m);
for(int i=0;i<n*m;i++){
scanf("%i",&a[i]);
}
sort(a.begin(),a.end());
int ans=0;
for(int i=0;i<n*m;i++){
int diff=(i==0?a[i]:a[i]-a[i-1]);
if(diff==0)continue;
int ways=mul(mul(F[n*m-i],F[i]),SolveInclusionExclusion(n*m-i));
ckadd(ans,mul(diff,ways));
//printf("bingo>=%i ways=%i\n",a[i],ways);
}
printf("%i\n",ans);
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 6ms
memory: 7884kb
input:
4 2 2 1 3 2 4 3 1 10 10 10 1 3 20 10 30 3 4 1 1 4 5 1 4 1 9 1 9 8 10
output:
56 60 60 855346687
result:
ok 4 number(s): "56 60 60 855346687"
Test #2:
score: 0
Accepted
time: 6ms
memory: 7512kb
input:
1 2 2 0 0 998244352 998244352
output:
998244345
result:
ok 1 number(s): "998244345"
Test #3:
score: 0
Accepted
time: 88ms
memory: 6992kb
input:
900 1 1 810487041 1 2 569006976 247513378 1 3 424212910 256484544 661426830 1 4 701056586 563296095 702740883 723333858 1 5 725786515 738465053 821758167 170452477 34260723 1 6 204184507 619884535 208921865 898995024 768400582 369477346 1 7 225635227 321139203 724076812 439129905 405005469 369864252...
output:
810487041 495026756 540662911 541929691 118309348 270925149 575366228 709974238 761347712 304011276 14811741 366145628 638305530 240546928 484276475 603344008 926633861 161768904 239961447 329781933 315752584 578075668 259941994 600147169 402221164 890998500 154285994 181862417 47930994 273729619 64...
result:
ok 900 numbers
Test #4:
score: 0
Accepted
time: 326ms
memory: 7212kb
input:
400 1 995 548100968 635656907 177366910 971271357 314579375 529572241 948721678 455918644 95745688 164857981 499083775 827896554 496889261 111294651 646048809 758286431 163045934 917399362 189372614 267754648 966443706 921589740 228089960 473153545 482816423 37567957 495730380 864445591 568695110 78...
output:
954668084 677509135 636173666 415373646 477286237 209886549 398423120 24466622 672440292 390142124 498517438 305197486 239833057 500821845 475519894 347179487 974036742 810602822 75196204 48378743 393961176 290898056 957916898 434124418 663457674 225283495 704304053 338701802 670053839 137083082 165...
result:
ok 400 numbers
Test #5:
score: -100
Time Limit Exceeded
input:
40 92 99 14480275 12892621 932457558 584861415 926346518 101583802 498448003 884757899 463949215 661256632 872663851 651132350 565253214 18404795 810166895 145370572 123351313 298382303 777283720 775900024 613503856 817112784 713304484 541301622 595768594 550989875 960159831 571815058 777864097 3608...