比赛 2025.1.14 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 遗失的赋值 最终得分 100
用户昵称 flyfree 运行时间 1.119 s
代码语言 C++ 内存使用 5.38 MiB
提交时间 2025-01-14 20:23:40
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXN 100010 
#define mod 1000000007
inline ll read(){
    ll x=0;
    char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
    return x;
}
map<ll,ll> mp;
ll pos[MAXN];
ll ans=1,n,m,p,T,type;
ll fpow(ll bas,ll idx){
    ll rez=1;
    while(idx>0){
        if(idx&1)rez=(rez*bas)%mod;
        bas=(bas*bas)%mod;
        idx>>=1; 
    }
    return rez;
}
void clear(){
    type=0;
    ans=1;
    for(int i=1;i<=m;i++)mp[pos[i]]=0;
}
int main(){
    freopen("assign.in","r",stdin);
    freopen("assign.out","w",stdout);
    T=read();
    while(T--){
        n=read(),m=read(),p=read();
        for(int i=1;i<=m;i++){
            pos[i]=read();
            ll val=read();
            if(mp[pos[i]]&&mp[pos[i]]!=val)type=1;
            mp[pos[i]]=val;
        }
        if(type){
            clear();
            cout<<"0\n";
            continue;
        }
        sort(pos+1,pos+1+m);
        for(int i=1;i<m;i++){
            ll c=pos[i+1]-pos[i];
            if(!c)continue;
            ans=ans*(fpow(p,c*2)+fpow(p,c-1)-fpow(p,c)+mod)%mod;
        }
//        cout<<ans<<" ";
        ans=ans*fpow(p,2*(pos[1]-1))%mod;
        ans=ans*(fpow(p,2*(n-pos[m])))%mod;
        cout<<ans<<endl;
        clear();
    }
    return 0;
}