| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38771 | baka24 | 【BJ】T2 | C++ | 通过 | 100 | 617 MS | 297356 KB | 2236 | 2025-10-27 15:21:01 |
#include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define fr first #define sc second #define mk make_pair bool AAA; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} const int MAXN=2000010,N=1010,M=50010,inf=1e9; ll Mod=2500000001ll; ll Pow(ll x,ll y){ll rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod,y>>=1;}return rt;} void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;} int n,m,k,a[MAXN],b[MAXN],t[MAXN]; ll p[MAXN]; int f[M][N]; bool is[M][N]; void sol3(){ for(int i=1;i<=k;i++)t[i]=b[i]; k+=2,b[k]=m,b[k-1]=1; sort(b+1,b+k+1); int km=unique(b+1,b+k+1)-b-1; for(int i=1;i<=k-2;i++)is[a[i]][upper_bound(b+1,b+km+1,t[i])-b-1]=1; for(int i=0;i<=n+1;i++)f[i][0]=f[i][km+1]=inf; for(int j=0;j<=km+1;j++)f[0][j]=f[n+1][j]=inf; for(int i=1;i<=n;i++)for(int j=1;j<=km;j++)f[i][j]=is[i][j]?0:f[i-1][j]+1; for(int i=n;i>=1;i--)for(int j=1;j<=km;j++)f[i][j]=min(f[i][j],f[i+1][j]+1); for(int i=1;i<=n;i++)for(int j=1;j<=km;j++)f[i][j]=min(f[i][j],f[i][j-1]+b[j]-b[j-1]); for(int i=n;i>=1;i--)for(int j=km;j>=1;j--)f[i][j]=min(f[i][j],f[i][j+1]+b[j+1]-b[j]); b[km+1]=m+1; int tmp=0; for(int i=1;i<=n;i++)for(int j=1;j<=km;j++){ int x=f[i][j],y=f[i][j+1]+1,s=b[j+1]-b[j]; if(x>y)swap(x,y); if(x+s-1<=y)p[x]++,p[x+s]--,tmp+=s; else p[x]++,p[y]++,p[(s-(y-x))/2+y]--,p[(s-(y-x)-1)/2+y+1]--,tmp+=(s-(y-x))/2+y+1-x+(s-(y-x)-1)/2+y+2-y; is[i][j]=0; } for(int i=1;i<=n+m;i++)p[i]+=p[i-1]; } void slv(){ n=read(),m=read(),k=read(); for(int i=1;i<=k;i++)a[i]=read(),b[i]=read(); sol3(); ll ans=1,ansn=1,sum=0; for(int i=0;i<=n+m-3;i++){ sum+=p[i]; ans=ans*(sum-i)%Mod; ansn=ansn*((ll)n*m-i)%Mod; p[i]=0; } printf("%lld\n",ans*Pow(ansn,Mod-2)%Mod); } bool BBB; signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); int _=read();while(_--) slv(); // cerr<<(clock()*1.0)/CLOCKS_PER_SEC<<"s\n"; // cerr<<((&AAA)-(&BBB))/1024.0/1024<<"MB\n"; return 0; }