1 条题解

  • 0
    @ 2023-3-13 11:51:15

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    long long n,p,a[1000100];
    //f:存放特征值 
    long long f[1000100],score[1000100],r,ma = LONG_LONG_MIN;//r存放每个人的分数 
    long long i;
    bool pd;
    int main(){
    	cin>>n>>p;
    	//读入n个值
    	for(i = 1;i <= n;i++){
    		cin>>a[i];
    	}
    	
    	//第一个人的特征值就是数字本身
    	f[1] = a[1];
    	//计算初步的特征
    	for(i = 2;i <= n;i++){
    		f[i] = max(f[i-1]+a[i],a[i]);
    	} 
    	
    //	for(i = 1;i <= n;i++){
    //		cout<<f[i]<<" "; 
    //	}
    //	cout<<endl;
    	
    	//考虑对于每个特征值,可能不是最佳答案 
    	for(i = 2;i <= n;i++){
    		f[i] = max(f[i],f[i-1]); 
    	} 
    	
    //	for(i = 1;i <= n;i++){
    //		cout<<f[i]<<" "; 
    //	}
    //	cout<<endl;
        
        //第一个人的分数是特征值
        score[1] = f[1]; 
    	score[2] = f[1] + score[1];
    	ma = max(score[1],score[2]);
    	for(i = 3;i <= n;i++){
    		if(f[i-1]>0){
    			score[i]=score[i-1]+f[i-1];
    			if(score[i] > score[1]){
    				pd = true;
    				score[i] %= p;
    			}
    		}else{
    			score[i] = score[2];
    		}
    		ma = max(ma,score[i]);
    	}
    //	for(i = 1;i <= n;i++){
    //		cout<<score[i]<<" ";
    //	}
    //	cout<<endl;
    //	cout<<ma%p;
    	if(pd) cout<<score[n]%p;
    	else cout<<score[1]%p;
    	cout<<endl;
    	return 0;
    }
    
    
    • 1

    信息

    ID
    1856
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者