比赛 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);
    } 
}