比赛 2025.1.14 评测结果 AAAAAAWEEAAAWWEEWWEE
题目名称 遗失的赋值 最终得分 45
用户昵称 健康铀 运行时间 2.088 s
代码语言 C++ 内存使用 7.11 MiB
提交时间 2025-01-14 21:50:27
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,v,t,c[1000010];
long long ans,mod=1e9+7;
long long ksm(long long a,long long b){
	a=a%mod;
    long long res=1;
	while(b){
		if(b&1)
		res=(long long)res*a%mod;
		a=a*a%mod; 
		b/=2;
	}
	return res;
}
int main(){
    freopen("assign.in","r",stdin);
    freopen("assign.out","w",stdout);
    cin>>t;
    while(t--){
        cin>>n>>m>>v;
        int u=1;
        memset(c,0,sizeof(c));
        for(int i=1;i<=m;i++){
            int p,q;
            cin>>p>>q;
            if(c[p]!=0&&c[p]!=q){
                u=0;
                break;
            }
            c[p]=q;
        }
        if(u==0){
            cout<<0<<endl;
            continue;
        }
        ans=1;
        int tp=1,pt=1,tp2;
        for(int i=1;i<=n;i++){
            if(c[i]==0)
            tp++;
            else
            break;
        }
        ans=ksm(v*v%mod,tp-1)%mod;
        for(int i=tp+1;i<=n;i++){
            if(c[i]!=0){
                ans=ans*(ksm(v,pt*2)%mod-ksm(v,pt)+ksm(v,pt-1))%mod;
                pt=1;
            }
            else{
                pt++;
            }
        }
        ans=ans*ksm(v*v%mod,pt-1)%mod;
        cout<<ans<<endl;
    }
    return 0;
}