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