社区讨论
45 pts求调
P11362[NOIP2024] 遗失的赋值参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m49n4vpe
- 此快照首次捕获于
- 2024/12/04 16:43 去年
- 此快照最后确认于
- 2025/11/04 13:22 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-'){f=-1;}ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0',ch=getchar();}return x*f;}
void write(int x){if(x<0){putchar('-'),x=-x;}if(x>9){write(x/10);} putchar(x%10+'0');return;}
int qpow(int a,int b,int mod){
if(b==0){return 1;}
int mid=qpow(a,b/2,mod)%mod;
if(b&1){return (mid*mid%mod)*a%mod;}
return mid*mid%mod;
}
const int N=1e5+5,mod=1e9+7;
int t;
int n,m,v;
int c[N];
map<int,int>mp;
signed main(){
// freopen("assign2.in","r",stdin);
cin>>t;
while(t--){
mp.clear();
memset(c,0,sizeof(c));
cin>>n>>m>>v;
int ans=qpow(v,n*2-2,mod);
for(int i=1,d;i<=m;i++){
cin>>c[i]>>d;
if(mp[c[i]]!=0&&mp[c[i]]!=d){
ans=0;
}
mp[c[i]]=d;
}
if(!ans){
cout<<ans<<"\n";
continue;
}
sort(c+1,c+m+1);
int mm=unique(c+1,c+m+1)-c-1;
// cout<<"ANS="<<mm<<"\n";
for(int i=2;i<=mm;i++){
ans=(ans*(qpow(v,c[i]-c[i-1]+1,mod)-1+mod)%mod)*qpow(v,(c[i]-c[i-1]+1)*(mod-2),mod)%mod;
}cout<<ans<<"\n";
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...