2018年山東省第九屆acm省賽F題,容斥原理
阿新 • • 發佈:2018-12-24
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; int main() { ll n,l1,l2,l3,l4,r1,r2,r3,r4,tp1l,tp2l,tp1r,tp2r,ans; scanf("%lld\n",&n); while(n--&&scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&l1,&r1,&l2,&r2,&l3,&r3,&l4,&r4)!=EOF) { ans=(r1-l1+1)*(r2-l2+1)%mod; ans=ans*(r3-l3+1)%mod; ans=ans*(r4-l4+1)%mod; //1==2 tp1l=max(l1,l2); tp1r=min(r1,r2); if(tp1l<=tp1r) ans=((ans-(tp1r-tp1l+1)*(r3-l3+1)%mod*(r4-l4+1)%mod)%mod+mod)%mod; //2==3 tp1l=max(l3,l2); tp1r=min(r3,r2); if(tp1l<=tp1r) ans=((ans-(tp1r-tp1l+1)*(r1-l1+1)%mod*(r4-l4+1)%mod)%mod+mod)%mod; //3==4 tp1l=max(l3,l4); tp1r=min(r3,r4); if(tp1l<=tp1r) ans=((ans-(tp1r-tp1l+1)*(r1-l1+1)%mod*(r2-l2+1)%mod)%mod+mod)%mod; //4==1 tp1l=max(l1,l4); tp1r=min(r1,r4); if(tp1l<=tp1r) ans=((ans-(tp1r-tp1l+1)*(r3-l3+1)%mod*(r2-l2+1)%mod)%mod+mod)%mod; //1==2 2==3 tp1l=max(l1,max(l3,l2)); tp1r=min(r1,min(r3,r2)); if(tp1l<=tp1r) ans=(ans+(tp1r-tp1l+1)*(r4-l4+1)%mod)%mod; //1==2 3==4 tp1l=max(l1,l2); tp1r=min(r1,r2); tp2l=max(l3,l4); tp2r=min(r3,r4); if(tp1l<=tp1r&&tp2l<=tp2r) ans=(ans+(tp1r-tp1l+1)*(tp2r-tp2l+1)%mod)%mod; //1==2 4==1 tp1l=max(l1,max(l4,l2)); tp1r=min(r1,min(r4,r2)); if(tp1l<=tp1r) ans=(ans+(tp1r-tp1l+1)*(r3-l3+1)%mod)%mod; //2==3 3==4 tp1l=max(l4,max(l3,l2)); tp1r=min(r4,min(r3,r2)); if(tp1l<=tp1r) ans=(ans+(tp1r-tp1l+1)*(r1-l1+1)%mod)%mod; //2==3 1==4 tp1l=max(l3,l2); tp1r=min(r3,r2); tp2l=max(l1,l4); tp2r=min(r1,r4); if(tp1l<=tp1r&&tp2l<=tp2r) ans=(ans+(tp1r-tp1l+1)*(tp2r-tp2l+1)%mod)%mod; //3==4 4==1 tp1l=max(l4,max(l3,l1)); tp1r=min(r4,min(r3,r1)); if(tp1l<=tp1r) ans=(ans+(tp1r-tp1l+1)*(r2-l2+1)%mod)%mod; //1==2==3==4 tp1l=max(l4,max(max(l2,l3),l1)); tp1r=min(r4,min(min(r2,r3),r1)); if(tp1l<=tp1r) ans=((ans-(tp1r-tp1l+1)*3)%mod+mod)%mod; printf("%lld\n",ans); } return 0; } /*************************************************** User name: 楊凡 Result: Accepted Take time: 0ms Take Memory: 184KB Submit time: 2018-05-07 23:14:40 ****************************************************/