BlauAnthony @ 2024-12-03 19:37:38
代码:
#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
int start(){
int n,m,v;
cin>>n>>m>>v;
const int m1=m;
int c[m],d[m];
for(int i=0;i<m;i++){
cin>>c[i]>>d[i];
}
unsigned int x[n];
memset(x,0,sizeof(x));
for(int i=0;i<m;i++){
if(x[c[i]-1]==0||x[c[i]-1]==d[i]){
x[c[i]-1]=d[i];
}else{
return 0;
}
}
int vp=v*v;
unsigned long long all=1;
for(int i=0;i<n-1;i++){
if(x[i]==0){
all*=vp;
}else{
if(x[i+1]==0){
all*=vp;
}else{
all*=vp-v+1;
}
}
}
return all;
}
int main(){
int t;
cin>>t;
for(int i=0;i<t;i++){
cout<<start()%(int)(pow(10,9)+7)<<endl;
}
return 0;
}
by wangxiaobu @ 2024-12-03 20:22:43
你是不是没按题目要求来呀?你在读一下题
by BlauAnthony @ 2024-12-03 21:14:47
@wangxiaobu我看了,我理解的是对的,但是有点细节问题,比如要不要高精度,还有模运算可以改进(这样就不用高精度了)。然后我发现似乎案例二好像没过。。。
by BlauAnthony @ 2024-12-04 18:25:28
终于20分了!!!
#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
const int mo=pow(10,9)+7;
int start(){
int n,m,v;
cin>>n>>m>>v;
const int m1=m;
int c[m],d[m];
for(int i=0;i<m;i++){
cin>>c[i]>>d[i];
}
unsigned int x[n];
memset(x,0,sizeof(x));
for(int i=0;i<m;i++){
if(x[c[i]-1]==0||x[c[i]-1]==d[i]){
x[c[i]-1]=d[i];
}else{
return 0;
}
}
int vp=v*v;
unsigned long long all=1;
for(int i=0;i<n-1;i++){
if(x[i]==0){
all*=vp;
}else{
if(x[i+1]==0){
all*=vp;
}else{
all*=vp-v+1;
}
}
all%=mo;
}
return all;
}
int main(){
int t;
cin>>t;
for(int i=0;i<t;i++){
cout<<start()%mo<<endl;
}
return 0;
}