山东省第九届省赛F题 Four-tuples(容斥定理)

所有都不相等-两个相等+三个相等+两对两个相等-四个相等。

取模WA了好多次。

#include <bits/stdc++.h>

using namespace std;

const int M=1e9+7;
typedef  long long ll;
ll l[10],r[10];
//ll cnt;
//void p()
//{
//     cnt=0;
//    for(int x=l[0]; x<=r[0]; ++x)
//    {
//        for(int y=l[1]; y<=r[1]; ++y)
//        {
//            for(int z=l[2]; z<=r[2]; ++z)
//            {
//                for(int k=l[3]; k<=r[3]; ++k)
//                {
//                    if(x!=y&&y!=z&&z!=k&&k!=x)
//                        cnt++;
//                    if(cnt>M)
//                    {
//                        printf("暴力:%lld\n",cnt);
//                        return;
//                    }
//                }
//            }
//        }
//    }
//    printf("暴力:%lld\n",cnt);
//
//}
ll L(int i)
{
    return r[i]-l[i]+1;
}
ll f(int a,int b)
{
    ll lt=max(l[a],l[b]);
    ll rt=min(r[a],r[b]);
    return rt-lt+1>0?rt-lt+1:0;
}
ll f2(int a,int b,int c)
{
    ll lt=max(l[a],max(l[b],l[c]));
    ll rt=min(r[a],min(r[b],r[c]));
    return rt-lt+1>0?rt-lt+1:0;
}
ll f3(int a,int b,int c,int d)
{
    ll lt=max(max(l[a],l[b]),max(l[c],l[d]));
    ll rt=min(min(r[a],r[b]),min(r[c],r[d]));
    return rt-lt+1>0?rt-lt+1:0;
}
int main()
{
    int t;
    scanf("%d",&t);
    long long sum=1;
    while(t--)
    {
        sum=1;
        for(int i=0; i<4; ++i)
        {
            scanf("%lld%lld",&l[i],&r[i]);
            l[i+4]=l[i];
            r[i+4]=r[i];
            sum*=r[i]-l[i]+1;
            sum%=M;
        }
        for(int i=0; i<4; ++i)
        {
            sum-=f(i,i+1)%M*L(i+2)%M*L(i+3)%M;
            sum=(sum+M)%M;
        }
        for(int i=0; i<4; ++i)
        {
            sum+=f2(i,i+1,i+2)%M*L(i+3)%M;
            sum=(sum+M)%M;
        }
        for(int i=0; i<2; ++i)
        {
            sum+=f(i,i+1)%M*f(i+2,i+3)%M;
            sum=(sum+M)%M;
        }
        sum-=f3(0,1,2,3)%M*3%M;
        sum=(sum+M)%M;
        printf("%lld\n",sum);
//        p();
//        if(sum!=cnt)printf("!!!!\n\n");
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/gzhynl/p/9025417.html