30分求条,玄一关
查看原帖
30分求条,玄一关
1073342
Genshin_ZFYX楼主2024/7/10 09:37
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
int qpow(int x,int y)
{
	if(y==0)return 1;
	if(y==1)return x;
	int efm=qpow(x,y/2)%mod;
	if(y%2==0)return efm*efm%mod;
	else return efm*efm%mod*x%mod;
}
unordered_map<int,int>mp;
struct node{
	int x,y;
}a[1000005];
bool cmp(node a,node b)
{
	if(a.x!=b.x)return a.x<b.x;
	else return a.y<b.y;
}
int bh[1000005],cnt,ans=1,ds;
signed main()
{
	cin.tie(0)->sync_with_stdio(0);
	int n,m,k,cnt=0;
	cin>>n>>m>>k;
	ds=n*(n+1)/2;
	for(int i=1;i<=k;i++)
	cin>>a[i].x>>a[i].y;
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=k;i++)
	{
		if(a[i].x==a[i-1].x&&a[i].y==a[i-1].y&&i!=1)continue;
		//cout<<a[i].x<<" "<<a[i].y<<endl;
		if(!mp[a[i].x])
		bh[++cnt]=a[i].x;
		mp[a[i].x]+=a[i].y;
	}
	for(int i=1;i<=cnt;i++)
	{
		ans*=(ds-mp[bh[i]])%mod;
		ans%=mod;
	}
	ans*=qpow(ds,m-cnt)%mod;
	cout<<ans%mod;
	return 0;
}

2024/7/10 09:37
加载中...