QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#771337 | #9735. Japanese Bands | SGColin | WA | 451ms | 12052kb | C++20 | 2.1kb | 2024-11-22 11:52:32 | 2024-11-22 11:52:39 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int mod=1000000007;
int m1[1<<20],m2[1<<20];
int inv[30];
int invf(int a){
a %= mod;
int b=mod-2;
int res = 1;
while (b > 0) {
if (b & 1) res = 1ll*res * a%mod;
a = 1ll*a * a%mod;
b >>= 1;
}
return res;
}
int calc(int n,int m){
if(m>n){return 0;}
if(m<0){return 0;}
int ans=1;
for(int i=1;i<=m;i++){
ans=1ll*ans*(n-i+1)%mod;
ans=1ll*ans*inv[i]%mod;
}
return ans;
}
set<int> s1;
int arr[410][2];
int main() {
inv[0]=1;
for(int i=1;i<=20;i++){
inv[i]=1ll*i*inv[i-1]%mod;
}
for(int i=1;i<=20;i++){
inv[i]=invf(inv[i]);
}
int t;scanf("%d",&t);
while(t--){
int n1,n2,m,k;scanf("%d%d%d%d",&n1,&n2,&m,&k);
s1.clear();
memset(m1,0,sizeof(m1));
memset(m2,0,sizeof(m2));
memset(arr,0,sizeof(arr));
for(int i=1;i<=k;i++){
scanf("%d%d",&arr[i][0],&arr[i][1]);
arr[i][0]--;arr[i][1]--;
s1.insert(arr[i][0]);
s1.insert(arr[i][1]);
}
int M=s1.size();
bool flag=true;
for(int i=0;i<(1<<M);i++){
flag=true;
int num=0,temp=i;
while(temp){
if(temp&1){num++;}
temp>>=1;
}
for(int j=1;j<=k;j++){
if(((i>>arr[j][0])&1)&&((i>>arr[j][1])&1)){
flag=false;break;
}
}
if(flag){
m1[i]=calc(n2-1+m-M,m-num-1);
m2[i]=calc(n1-1+m-M,m-num-1);
}
}
for(int j = 0; j < M; j++)
for(int i = 0; i < 1 << M; i++)
if(i >> j & 1) m2[i] = (1ll*m2[i]+m2[i ^ (1 << j)])%mod;
int ans=0;
for(int i=0;i<(1<<M);i++){
int j=((1<<M)-1)^i;
ans=(1ll*ans+m1[i]*m2[j])%mod;
}
printf("%d\n",ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 12032kb
input:
3 2 3 3 3 2 3 1 1 2 3 2 2 2 1 1 1 1 1 10 2 1 2 1 3
output:
6 4 0
result:
ok 3 lines
Test #2:
score: -100
Wrong Answer
time: 451ms
memory: 12052kb
input:
500 481199252 336470888 8 58 4 7 7 6 4 7 2 6 2 6 2 7 8 3 8 7 8 1 2 6 2 6 1 2 1 5 3 1 6 4 2 4 4 7 2 6 2 3 7 1 4 4 5 1 2 7 6 7 8 1 8 7 5 6 4 2 4 2 8 5 5 4 6 8 5 6 3 8 1 7 1 6 7 1 5 6 6 3 1 1 2 7 3 3 1 5 5 5 8 7 3 4 6 3 8 8 7 4 1 6 2 1 8 7 4 5 2 7 3 5 2 6 4 5 4 3 2 6 2 2 2 1 1 1 500330171 987581927 10 ...
output:
442693601 11 156956225 -390119605 361424094 1 -385407756 330202800 1 -123882840 788820252 1 0 547258985 -678438956 -339787446 735294986 -83903634 -783778716 -86221587 0 294285321 -206171347 387708282 16 624508534 -563893148 766854751 1 -278962062 427629686 474763153 0 779844158 1 -851701371 74848426...
result:
wrong answer 1st lines differ - expected: '724920553', found: '442693601'