社区讨论

60pts求调

P11362[NOIP2024] 遗失的赋值参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@migauf5k
此快照首次捕获于
2025/11/27 01:49
3 个月前
此快照最后确认于
2025/11/27 10:34
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int fr(){
	int x=0,w=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-'){w=-1;}c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*w;
}
const int mod=1e9+7;
const int N=1e5+9;
ll t,n,m,v,c[N],d[N],ans=1,cnt=0,c1,d1;
bool flag;
ll qpw(ll a,ll b){//a^b
	ll tmp=1,base=a;
	while(b>0){
		if(b&1){
			tmp*=base;
			tmp%=mod;
		}
		base*=base;
		base%=mod;
		b>>=1;
	}
	return tmp;
}
int main(){
	freopen("1.in","r",stdin);
	freopen("1.out","w",stdout);
	t=fr();
	while(t--){
		ans=1;
		cnt=0;
		flag=0;
		map<ll,ll> s;
		n=fr();m=fr();v=fr();
		for(int i=1;i<=m;i++){
			c1=fr();d1=fr();
			if(s[c1]==d1)continue;
			else if(s[c1]>0){
				ans=0;
				flag=1;
			}
			else{
				s[c1]=d1;
				c[++cnt]=c1;
				d[cnt]=d1;
			}
		}
		//for(int i=1;i<=cnt;i++)cout<<c[i]<<" ";
		if(flag){
			ans=0;
		}
		else if(cnt==1)ans=qpw(v,2*n-2);
		else{
			sort(c+1,c+1+cnt);
			for(int i=1;i<cnt;i++){
				ans*=(qpw(v,2*c[i+1]-2*c[i])-qpw(v,c[i+1]-c[i]-1)*(v-1));
				ans%=mod;
			}
			ans*=qpw(v,2*(c[1]-1+n-c[cnt]));
			ans%=mod;
		}
		cout<<ans<<endl;
	}
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...