QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#750938#9735. Japanese BandsoipotatoRE 0ms3836kbC++231.7kb2024-11-15 16:26:062024-11-15 16:26:09

Judging History

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

  • [2025-01-18 23:34:05]
  • hack成功,自动添加数据
  • (/hack/1459)
  • [2024-11-15 16:26:09]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:3836kb
  • [2024-11-15 16:26:06]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define pb push_back
#define mp make_pair
#define data dataa
using LL=long long;
using ULL=unsigned long long;
using LD=long double;
const int MOD=int(1e9)+7;
int inv[50],ans[1<<20],a[410],n1,n2,k,m;
void update(int&x,int y){x=(x+y)%MOD;}
int mypow(int x,int n){int res=1;for(;n;n>>=1,x=LL(x)*x%MOD)if(n&1)res=LL(res)*x%MOD;return res;}
int C(int n,int m)
{
    int res=1;
    for(int i=n;i>=n-m+1;i--)res=LL(res)*i%MOD;
    rep(i,m)res=LL(res)*inv[i]%MOD;
    return res;
}
int cal(int n,int m)
{
    if(n<m)return 0;
    return C(n-1,m-1);
}
int main()
{
    int T;
    inv[0]=1;
    rep(i,20)inv[i]=LL(inv[i-1])*mypow(i,MOD-2)%MOD;
    for(scanf("%d",&T);T--;)
    {
        scanf("%d%d%d%d",&n1,&n2,&m,&k);
        rep(i,k)
        {
            int x,y;scanf("%d%d",&x,&y);
            a[i]=(1<<(x-1))|(1<<(y-1));
        }
        for(int i=0;i<(1<<m);i++)
        {
            bool flag=1;
            rep(j,k)if(!(a[j]&i)){flag=0;break;}
            ans[i]=flag*cal(n2,__builtin_popcount(i));
        }
        rep(i,m)rep(j,(1<<m))if(!((j>>(i-1))&1))update(ans[j],ans[j^(1<<(i-1))]);
        int allans=0;
        for(int i=0;i<(1<<m);i++)
        {
            bool flag=1;
            int msk=0;
            rep(j,k)
            {
                int x=a[j]&i;
                if(!x){flag=0;break;}
                if((a[j]&-a[j])==a[j]){msk|=a[j];continue;}
                if((x&-x)==x)msk|=a[j]^x;
            }
            if(!flag)continue;
            update(allans,LL(cal(n1,__builtin_popcount(i)))*ans[msk]%MOD);
        }
        printf("%d\n",allans);
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3836kb

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
Runtime Error

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:


result: