0分太邪恶了

P11362 [NOIP2024] 遗失的赋值

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;
}

|