比赛 |
2025.1.14 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
遗失的赋值 |
最终得分 |
100 |
用户昵称 |
123 |
运行时间 |
1.144 s |
代码语言 |
C++ |
内存使用 |
5.05 MiB |
提交时间 |
2025-01-14 20:47:03 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7,N=200010;
struct node {
long long c,d;
} a[N];
map<long long,int> mp;
int t,n,m;
long long v;
int cmd(node x,node y)
{
return x.c<y.c;
}
long long qpow(long long v,long long n)
{
v%=mod;
long long ret=1,cnt=v;
while (n)
{
if (n%2==1)
{
ret*=cnt;
ret%=mod;
}
cnt*=cnt;
cnt%=mod;
n/=2;
}
return ret;
}
int main() {
freopen("assign.in","r",stdin);
freopen("assign.out","w",stdout);
cin>>t;
while (t--)
{
long long ret=1;
mp.clear();
scanf("%d%d%lld",&n,&m,&v);
for (int i=1;i<=m;i++)
{
scanf("%lld%lld",&a[i].c,&a[i].d);
if (mp[a[i].c] && mp[a[i].c]!=a[i].d)
{
ret=-1;
}
mp[a[i].c]=a[i].d;
}
if (ret==-1)
{
printf("0\n");
continue;
}
sort(a+1,a+m+1,cmd);
ret=qpow(v*v,a[1].c-1);
ret%=mod;
for (int i=2;i<=m;i++)
{
if (a[i].c==a[i-1].c) continue;
int q=a[i].c-a[i-1].c;
ret*=((qpow(v*v,q)%mod)-((v-1)*qpow(v,q-1)%mod)+mod)%mod;
ret%=mod;
}
ret*=qpow(v*v,n-a[m].c);
ret%=mod;
printf("%lld\n",ret);
}
}