所有都不相等-两个相等+三个相等+两对两个相等-四个相等。
取模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; }