• 小朋友的数字(codevs 3293)


    题目描述 Description

    有n个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。
    作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值。
    请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对p取模后输出。

    输入描述 Input Description

    第一行包含两个正整数n、p,之间用一个空格隔开。
    第二行包含n个数,每两个整数之间用一个空格隔开,表示每个小朋友手上的数字。

    输出描述 Output Description

    输出只有一行,包含一个整数,表示最大分数对p取模的结果。

    样例输入 Sample Input

    [Sample 1]
    5 997
    1 2 3 4 5
    [Sample 2]
    5 7
    -1 -1 -1 -1 -1

    样例输出 Sample Output

    [Sample 1]
    21
    [Sample 2]
    -1

    数据范围及提示 Data Size & Hint

    【样例说明】
    样例1小朋友的特征值分别为1、3、6、10、15,分数分别为1、2、5、11、21,最大值21对997的模是21。
    样例2小朋友的特征值分别为-1、-1、-1、-1、-1,分数分别为-1、-2、-2、-2、-2,最大值-1对7的模为-1,输出-1。

    【数据范围】
    对于50%的数据,1≤n≤1,000,1≤p≤1,000所有数字的绝对值不超过1000;
    对于100%的数据,1≤n≤1,000,000,1≤p≤10^9,其他数字的绝对值均不超过10^9。

    /*
      看数据范围,感觉long long应该可以过,但是不是道为什么WA了两个点,剩下两个点有个小技巧。
      首先模拟最大子段和求出te数组,求fen数组的时候,我们发现,除了fen[1]和fen[2],剩下的保证不下降,
      那么当剩下的都比fen[1]小的时候,我们可以直接输出fen[1],不会越long long,否则输出fen[n],因为
      此时fen[n]一定是最大的。 
    */
    #include<cstdio>
    #include<iostream>
    #define M 1000010
    #define INF 1000000000000000000LL
    #define LL long long
    using namespace std;
    LL te[M],fen[M],mod;int n;
    bool flag=false;
    LL read()
    {
        char c=getchar();LL num=0,flag=1;
        while(c<'0'||c>'9'){if(c=='-')flag=-1;c=getchar();}
        while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();}
        return num*flag;
    }
    int main()
    {
        scanf("%d",&n);mod=read();
        LL maxn=read();te[1]=maxn;
        LL s=maxn;
        for(int i=2;i<=n;i++)
        {
            LL x=read();
            s=max(s+x,x);
            te[i]=max(s,maxn);
            maxn=max(maxn,te[i]);
        }
        fen[1]=te[1];fen[2]=fen[1]*2;
        for(int i=3;i<=n;i++)
        {
            if(te[i-1]>0)
            {
                fen[i]=te[i-1]+fen[i-1];
                if(fen[i]>fen[1])
                {
                    flag=1;
                    fen[i]%=mod;
                }
            }
            else fen[i]=fen[2];
        }
        if(flag)cout<<fen[n]%mod;
        else cout<<fen[1]%mod;
        return 0;
    }
    View Code
  • 相关阅读:
    C# 控件,MenuStrip,statusStrip,contextMenuStrip,ImageList, Listview,MonthCalendar、DataGridView,combobox,textbox,DateTimePicker,treeview,picturebox、toolStrip,radioButton,TableLayoutPanel,numericUpDown
    c# 数据库操作,多数据库操作、数据库操作异常报错等问题
    Jquery 选择器的写法, selector
    C# 一、语法结构、注释、命名空间、Main入口点、变量与常量、运算符、流程控制(循环)
    c# 项目文件,C#viual studio使用方法
    finereport Web工具栏
    C# 学习笔记
    c# public private protected internal protected internal
    js Object.prototype.hasOwnProperty() 与 for in 区别
    js 对象的深克隆
  • 原文地址:https://www.cnblogs.com/harden/p/5811381.html
Copyright © 2020-2023  润新知