有趣的细节题目

题目描述

有 n 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。

作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这样规定的:第一个小朋友的分数是他的特征值,其它小朋友的分数为排在他前面的所有小朋友中(不包括他本人),小朋友分数加上其特征值的最大值。

请计算所有小朋友分数的最大值,输出时保持最大值的符号,将其绝对值对 p 取模后输出。

对于 100%的数据,1 ≤ n ≤ 1,000,000,1 ≤ p ≤ 10^9,其他数字的绝对值均不超过 10^9。

求的就是1.特征值 2.分数。

特征值:

算法一:

静态前缀和。

直接枚举出所有的情况(两前缀和之差就是一段区间的sum值),取max。顺便取一下因为当前这一位存在意义就是它被取为最大区间的值,否则就应当取之前的special值,以维持它的不下降性质。但是如果想把这种思路优化到的话,是不可以的。例如这组数据:“3 -2 3”,value[2]对于special[1]是没有意义的,但是value[1]+value[2]>0故对于special[3]有意义。

由此引申到算法二

算法二:

这是一个假算法:看做很多个子段和,还有分开的前缀和,但是不能保证每一个值是前面的最大值

算法三:

这不就是最大子段和的入门题吗(某年初赛题)然后再维持一下最大值以及顺序赋值就可以了

分数:

由题面可以得到。并且在中维持不下降的性质(当时,答案可能是;当,答案必为)。那么就容易得到。因为计算过程中有可能爆精度,但又不能马上模,一种是C++中__int128,另一种是当时就能确定(但是!但是!这个方法 虽然 被很多AC数据采用,但是遇到如:8 66 -511657297 151810723 -588294472 -271526366 58051666 -792123397 -76376854 -36217375 此数据时会计算出错误答案!)。如果坚持正解的话,还是用大整数或者__int128(C++)吧。

那么怎么计算呢?

题目的计算方法是

我们可以发现,

所以当计算时,我们只需要比较,即看的正负

同样的,我们需要维持这个序列的不下降性。于是就过了。

“将其绝对值对 p 取模后输出”我是先取绝对值,再按原符号not x + 1 (get到了转相反数的位运算)

另外,模数是个麻烦的问题。最早的时候,我是输入就模、计算就模,但是我忽略了一个非常明显的问题:最大值 模后 不一定最大,就是说这样计算出来的只是模后最大值。所以用以上的“另一种”方法,在确定后开始模数(于是就和大部分程序一样实际上不完全正确;但本题luogu数据(也许就是当年数据)真的非常不全面,就算很多小细节没有完全也能AC)

还有一件事:pas里面longint溢出没有报RE!90分的最后一个点WA就是因为溢出到负数!这操作很神奇

精简后的代码框架就是这样子的

最新文章

  1. C#解决界面不响应
  2. linux开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录
  3. 修改windows自带的Ctrl+Space输入法切换快捷键
  4. opencv 之 icvCreateHidHaarClassifierCascade 分类器信息初始化函数部分详细代码注释。
  5. tornado 协程的实现原理个人理解;
  6. TestNG之执行顺序
  7. alloc && afree
  8. 基于SOCK4网络协议的代理服务器端代码示例
  9. 属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter
  10. Oracle RAC集群安装之:Grid软件安装过程蓝屏
  11. Error occured processing XML 'Cannot find class [springmvc.extention.BeanArgumentResolver]'.
  12. 大白痴学习webmagic
  13. 从头开始学JavaScript (九)——执行环境和作用域
  14. Java代码审查工具findbugs的使用总结
  15. IIS 部署WCF服务注意事项
  16. Visual Studio中的.suo(Solution User Options)文件
  17. 给学习Linux系统小白的两三个建议
  18. Windows环境selenium+Python环境配置
  19. poj 1703 - Find them, Catch them【带权并查集】
  20. error: illegal character '\ufeff' 的解决方案

热门文章

  1. 社交系统ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台配置
  2. MySQL的slave_exec_mode参数作用
  3. TYVJ P2032 「Poetize9」升降梯上 spfa最短路
  4. maven settings.xml linux
  5. 《四 spring源码》spring的事务注解@Transactional 原理分析
  6. Android sdk manager 显示 “Done loading packages”,该怎么办?
  7. SpringCloud服务的平滑上下线
  8. 基于JAVA的设计模式之组合模式
  9. IO(转换流、缓冲流)
  10. 1043 方格取数 2000年NOIP全国联赛提高组