
小朋友的数字
发布日期:2021-05-07 07:06:17
浏览次数:25
分类:原创文章
本文共 1213 字,大约阅读时间需要 4 分钟。
小 朋 友 的 数 字 小朋友的数字 小朋友的数字
题目链接: / / /
题目
有 n n n 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。
作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值。
请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p p p 取模后输出。
输入
第一行包含两个正整数 n n n、 p p p,之间用一个空格隔开。
第二行包含 n n n 个数,每两个整数之间用一个空格隔开,表示每个小朋友手上的数字。
输出
输出只有一行,包含一个整数,表示最大分数对 p p p 取模的结果。
样例输入1
5 997 1 2 3 4 5
样例输出1
21
样例输入2
5 7 -1 -1 -1 -1 -1
样例输出
-1
思路
这道题就是一道模拟。
我们可以用最大连续子序列求出每个人的特征值,再按照题目求出每个人的分数。
我们再找到最大的分数,就是答案了。
(记得取模)
代码
#include<cstdio>#define ll long long#define max(x, y) (x) > (y) ? (x) : (y)using namespace std;ll n,p,s[10000001],t[10000001],f[10000001],k[10000001],maxn=-2147483647,x,ans;int main(){ scanf("%lld %lld", &n, &p);//读入 for(ll i = 1; i <= n; i ++) { scanf("%lld", &x);//读入 if(s[i - 1] > 0) s[i] = s[i - 1] + x;//最大连续子序列 else s[i] = x; maxn = max(s[i], maxn);//求最大值 t[i] = maxn % p;//标记 } ans = t[1];//初始化 f[1] = t[1];//初始化 maxn = -2147483647;//初始化 for(ll i = 2; i <= n; i ++) { maxn = max(maxn, t[i - 1] + f[i - 1]);//求出每个人的分数 f[i] = maxn;//赋值 if(ans < maxn) ans=maxn % p;//求出最大值 } printf("%lld", ans);//输出 return 0;}
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月22日 22时28分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
gRPC在 ASP.NET Core 中应用学习(一)
2019-03-06
@SuppressWarnings 用法
2019-03-06
看完你就明白的锁系列之锁的状态
2019-03-06
看完这篇操作系统,和面试官扯皮就没问题了
2019-03-06
我的价值观
2019-03-06
一文详解 Java 并发模型
2019-03-06
值类型与引用类型(中)
2019-03-06
MSSQL 2005 数据库变成可疑状态
2019-03-06
QBlog V2.5 源码开放下载(ASP.NET 番外系列之开端)
2019-03-06
秋色园引发CPU百分百命案的事件分析与总结
2019-03-06
安装jdk并配置环境变量
2019-03-06
稀疏数组
2019-03-06
js的严格模式
2019-03-06
idea的安装和无限期试用
2019-03-06
Oracle VM VirtualBox安装PVE虚拟机
2019-03-06
【转】如何用css限制文字长度,使溢出的内容用省略号…显示
2019-03-06
Android MediaPlayer setDataSource failed
2019-03-06
ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
2019-03-06
【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
2019-03-06