90分求助!!!
查看原帖
90分求助!!!
844496
J_Kobe楼主2024/7/11 09:08
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int mod = 1e9 + 7;
int n, m, k, sum, ans, x[100005], y[100005];
map<int, int> t;
map<int, map<int, bool> > flag;
int quick_pow(int a, int b)
{
	int sum = a, ans = 1, bb = b;
	while (bb)
	{
		if (bb % 2)
		{
			ans %= mod;
			ans *= sum;
			ans %= mod;
		}
		sum %= mod;
		sum *= sum;
		sum %= mod;
		bb /= 2;
	}
	return ans;
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie();cout.tie();
	cin >> n >> m >> k;
	int cnt = 0;
	for (int i = 1; i <= k; i++)
	{
		cin >> x[i] >> y[i];
		if (t[x[i]] == 0)
		{
			cnt++;
		}
		if (flag[x[i]][y[i]] == 0)
		{
			flag[x[i]][y[i]] = 1;
			t[x[i]] += y[i];
		}
	}
	sum = n * (n + 1) / 2;
	sum %= mod;
	ans = quick_pow(sum, m - cnt);
//	cout << ans << endl;
	for (int i = 1; i <= k; i++)
	{
		if (t[x[i]])
		{
			ans %= mod;
			int now = sum - t[x[i]];
			ans = (ans % mod) * (now % mod);
			ans %= mod;
			t[x[i]] = 0;
		}
	}
	cout << ans;
	return 0;
}

/*
(n(n+1)/2)^m
(1+2+...+n)*(1+2+...+n)*...*(1+2+...+n)   m

*/
2024/7/11 09:08
加载中...