WA了第二个点,本蒟查了半小时, dalao看看吧QWQ
查看原帖
WA了第二个点,本蒟查了半小时, dalao看看吧QWQ
745892
xiongyuhan楼主2022/12/14 15:17
#include<bits/stdc++.h>
#define int long long
#define N 1000000007
using namespace std;
int n, m, k;
struct node{
	int s, x;
}xz[100005];
int fpow(int a, int b){
	int res = 1;
	while(b){
		if(b & 1) res = res * a % N;
		a = a * a % N;
		b >>= 1;
	}
	return res;
}
bool cmp(node a, node b){
	if(a.s != b.s) return a.s < b.s;
	return a.x < b.x;
}
signed main(){
	cin >> n >> m >> k;
	for(int i = 1 ; i <= k ; i++){
		cin >> xz[i].s >> xz[i].x;
	}
    int mul = (long long)(1 + n) * n / 2 % N;
	sort(xz + 1, xz + k + 1, cmp);
	int cnt = 0, ans = 1, tmp = mul;
	for(int i = 1; i <= k ; i++){
		if(xz[i].s == xz[i + 1].s && xz[i].x == xz[i + 1].x) continue;
		tmp = tmp - xz[i].x;
		if(xz[i].s != xz[i + 1].s){
			ans = ans * tmp % N;
			tmp = mul;
			cnt++;
			// cout << ans <<" "<< i << endl;
		} 
	}
	// cout << fpow(n, m - cnt) << endl;
	cout << (ans * fpow(mul, m - cnt)) % N;
	return 0;
}
2022/12/14 15:17
加载中...