85pts求调
查看原帖
85pts求调
631550
liuziqin楼主2024/7/8 08:41
#include<bits/stdc++.h>
#define int __int128
using namespace std;
const int mod=1000000007ll;
int a[1000005ll],b[1000005ll];
inline void read(__int128 &s){
    s=0ll;
    char c=' ';
    while(c>'9'||c<'0') c=getchar();
    while(c>='0'&&c<='9'){
        s=(s*10ll+c-'0')%mod;
        c=getchar();
    }
}
inline void write(__int128 x){
	if(x<0ll)putchar('-'),x=-x;
    if(x>9ll)write(x/10ll);
    putchar(x%10ll+'0');
}
int X,Y,A[100005],B[100005];
signed main() {
	int n,m,k,x,y;
	read(n),read(m),read(k),read(x),read(y);
	X=x,Y=y;
	n%=mod,m%=mod,x%=mod,y%=mod;
	for(int i=1;i<=k;i++){
		read(a[i]),read(b[i]);
		A[i]=a[i],B[i]=b[i];
		a[i]%=mod,b[i]%=mod;
	}
	int ans=0ll;
	for(int i=1ll;i<=k;i++){
		if(A[i]==X){
			if(B[i]<Y)(ans+=(int)(1ll*((b[i]*(((n+m)%mod-2ll+mod)%mod))%mod+((((y-b[i]+mod)%mod-1ll+mod)%mod)*b[i])%mod)%mod+(((m-y+mod)%mod)*b[i])%mod))%=mod;
			else (ans+=(int)(1ll*((((m-b[i])%mod+1ll+mod)%mod)*(((n+m)%mod-2ll+mod)%mod)+(((b[i]-y+mod)%mod-1ll+mod)%mod)*(((m-b[i]+mod)%mod+1ll+mod)%mod))%mod+((y-1ll+mod)%mod)*(((m-b[i]+mod)%mod+1)%mod)%mod))%=mod;
			continue;
		}
		if(B[i]==Y){
			if(A[i]<X)(ans+=(int)(1ll*((a[i]*(((n+m)%mod-2ll+mod)%mod))%mod+((((x-a[i]+mod)%mod-1ll+mod)%mod)*a[i])%mod)%mod+(((n-x+mod)%mod)*a[i])%mod))%=mod;
			else(ans+=(int)(1ll*((((n+m)%mod-2ll+mod)%mod)*(((n-a[i]+mod)%mod+1ll+mod)%mod)%mod+((((a[i]-x+mod)%mod-1ll+mod)%mod)*(((n-a[i]%mod)+1ll+mod)%mod))%mod)%mod+(((x-1ll+mod)%mod)*(((n-a[i]+mod)%mod+1ll)%mod))%mod))%=mod;
			continue;
		}
		if(A[i]<X)(ans+=(int)(1ll*a[i]))%=mod;
		else (ans+=(int)(1ll*((n-a[i]+mod)%mod+1ll)%mod))%=mod;
		if(B[i]<Y)(ans+=(int)(1ll*b[i]))%=mod;
		else (ans+=(int)(1ll*((m-b[i]+mod)%mod+1ll)%mod))%=mod;
	}
	(ans+=mod)%=mod;
	write((ans+mod)%mod);
	cout<<"\n";
}
2024/7/8 08:41
加载中...