自己纸上画画应该就会了,这种题多做点就好了吧,推式子就会快很多,当时省赛没写出来.读了假题+时间太短+太饿了吧?
另外感谢清楚姐姐帮忙重现~
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e9+7; ll qp(ll a,ll b) { ll res=1; while(b) { if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; }return res; } ll iv; ll Cnt(ll a,ll b) { return (1+a)*a%mod*iv%mod*(1+b)%mod*b%mod*iv%mod; } ll cnt(ll a,ll b) { return (1+a)*a%mod*iv%mod*b%mod; } int main() { ll a,b;iv=qp(2,mod-2);ll ans=0; while(cin>>a>>b) { ans=0; ll x1,x2,y1,y2; cin>>x1>>x2>>y1>>y2; if(b<y1||a<x1) { ans=(ans+Cnt(a,b)+a*b%mod*(y2-y1)%mod*(x2-x1)%mod)%mod; } else if((a>=x1&&a<=x2)&&(b>=y1&&b<=y2)) { ans=((ans+Cnt(a,b)+a*b%mod*(y2-y1)%mod*(x2-x1)%mod-Cnt(a-x1,b-y1))%mod+mod)%mod; } else if((a>=x1&&a<=x2)&&(b>y2)) { ans=((ans+Cnt(a,b)+a*b%mod*(y2-y1)%mod*(x2-x1)%mod-Cnt(a-x1,y2-y1)-cnt((a-x1),(b-y2))*(y2-y1)%mod)%mod+mod)%mod; } else if((a>x2)&&(b>=y1&&b<=y2)) { ans=((ans+Cnt(a,b)+a*b%mod*(y2-y1)%mod*(x2-x1)%mod-Cnt(x2-x1,b-y1)-cnt((b-y1),(a-x2))*(x2-x1)%mod)%mod+mod)%mod; } else { ans=((ans+Cnt(a,b)+a*b%mod*(y2-y1)%mod*(x2-x1)%mod-Cnt(x2-x1,y2-y1)-cnt(x2-x1,b-y2)*(y2-y1)-cnt(y2-y1,a-x2)*(x2-x1)-(a-x2)*(b-y2)%mod*(x2-x1)%mod*(y2-y1)%mod)%mod+mod)%mod; } cout<<ans<<endl; } return 0; }