比赛 |
2025.1.14 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
遗失的赋值 |
最终得分 |
100 |
用户昵称 |
彭欣越 |
运行时间 |
1.143 s |
代码语言 |
C++ |
内存使用 |
4.57 MiB |
提交时间 |
2025-01-14 21:31:05 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e5+10,mod=1e9+7;
ll T,n,m,v;
ll ans;
struct node {
ll c,d;
}s[M];
map<int,int>mp;
bool cmp (node x,node y) {
return x.c<y.c;
}
ll qpow (ll a,ll b) {
ll sum=1;
while (b) {
if (b&1) {
sum*=a;
sum%=mod;
}
a*=a;
a%=mod;
b/=2;
}
return sum;
}
int main () {
freopen("assign.in","r",stdin);
freopen("assign.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> T;
while (T--) {
ans=1;
mp.clear();
cin >> n >> m >> v;
int flag=0;
for (int i=1;i<=m;i++) {
cin >> s[i].c >> s[i].d;
if (mp[s[i].c]) {
if (mp[s[i].c]!=s[i].d) flag=1;
}else mp[s[i].c]=s[i].d;
}
if (flag==1) {
cout << 0 <<endl;
continue;
}
sort(s+1,s+1+m,cmp);
ans=ans*qpow(v,s[1].c*2-2)%mod;
for (int i=2;i<=m;i++) {
int t=s[i].c-s[i-1].c;
if (t==0) continue;
ans*=(qpow(v,t*2)%mod-qpow(v,t-1)*(v-1)%mod+mod)%mod;
ans%=mod;
}
ans*=qpow(v,2*(n-s[m].c));
cout << ans%mod <<endl;
}
return 0;
}