【洛谷P1982】小朋友的数字
小朋友的数字
题目翻译:
每个小朋友有一个数字,构成一个数字序列a1,a2…an
我们定义“特征值”fi为a1~ai中的最大连续子段和
再定义“分数”si为1~i-1中最大的(sj+fj),特殊的,s1=f1,
要求输出最大的si
DP:
于是我们可以dp求出每个最大连续子段和作为特征值
然后按题意模拟一遍求出每个分数
状态定义:
dp[i]表示以i为结尾的最大子段和
方程
dp[i]=max(dp[i-1],0)+x; //连着/不连着 前面
f[i]=max(f[i-1],dp[i]);
优化:
空间:
我们发现f[i]、dp[i]都是由f[i-1]、dp[i-1]转移来的,我们可以考虑将数组降一维 于是空间复杂度就是常数级别的了
时间:
1.1e6的数据快读是有一定作用的
2.边读入边处理,减少常数
3.由于要用long long,取模运算很慢,可以考虑减少取模次数,当ans>1e17时再取模
#include<cstdio>
using namespace std;
#define int long long
#define N 1000010
#define INF 0x3f3f3f3f
const int ch_top=4e7+;
char ch[ch_top],*now_r=ch-,*now_w=ch-;
inline int read(){ //快读
int f=;
while(*++now_r<'') if(*now_r=='-') f=-;
register int x=*now_r-'';
while(*++now_r>='')x=(x<<)+(x<<)+*now_r-'';
return x*f;
}
inline void write(int x){ //并没用什么卵用的快写
if(x<){*++now_w='-',x=-x;}
static char st[];static int top;
while(st[++top]=''+x%,x/=);
while(*++now_w=st[top],--top);
*++now_w='\n';
}
int n,p,dp,ans1,ans;
bool flag;
#undef int
int main()
#define int long long
{
fread(ch,,ch_top,stdin);//快读
n=read(); p=read();
int x,f;
dp=f=read();
ans1=f;ans=f*; //特殊处理第一个数
/*ans1为第一个小朋友的分数,
ans为其他小朋友的分数的最大值*/
for(int i=;i<n;i++){
x=read();
dp=(dp>?dp:)+x;
if(dp>f) f=dp;
if(f>) ans=ans+f;
if(ans>1e17) { ans%=p,flag=; }
/*当ans为负时,一定不会是两个以上的
负数之和,不会爆ll,若取过模,ans一定大于
ans1,用一个flag记录*/
}
if(flag)write(ans%p);
else{
if(ans1>ans) ans=ans1;
write(ans%p);
}
fwrite(ch,,now_w-ch,stdout); //快写
return ;
}
开O2 32ms ,大概是非打表提交的最优解
【洛谷P1982】小朋友的数字的更多相关文章
- 洛谷P1982 小朋友的数字
题目传送门 这个题的题目有点长,我们先来分析一波. 首先,这个题目中提到了以下几个量 1.最直接的就是每个小盆友手上的数字,这是题目给你的 2.每个小盆友的特征值 题目中给的定义是:每个小朋友的特征值 ...
- 洛谷P1982 小朋友的数字——题解
题目传送 简单地说,这题就是让我们求前i个数的最大子串和和最值. 对于最大子串和,我们可以设一个变量qian,表示以当前元素结尾的最大子串的子串和.若搜索完第i-1个小朋友,现在看到第i个小朋友时,若 ...
- [洛谷P3292] [SCOI2016]幸运数字
洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...
- 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)
洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...
- 洛谷P2501 bzoj1049 [HAOI2006]数字序列
题目链接 bzoj 洛谷 题解 第一问: 假如 \(i < j\) 如果 \(j\)能从\(i\)转移过来 显然中间空隙必须足够 例如:\(50\) \(53\) \(53\) \(52\) 就 ...
- bzoj2154||洛谷P1829 Crash的数字表格&&JZPTAB && bzoj3309 DZY Loves Math
bzoj2154||洛谷P1829 https://www.lydsy.com/JudgeOnline/problem.php?id=2154 https://www.luogu.org/proble ...
- 【dp】P1982 小朋友的数字
有趣的细节题目 题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之 ...
- P1982 小朋友的数字
题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个 小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋 友手上的数字之和的最大值. ...
- 洛谷P3292 [SCOI2016] 幸运数字 [线性基,倍增]
题目传送门 幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的 ...
随机推荐
- Springboot简单整合Rabbit
两个项目.分别是生产者和消费者项目 .首先引入依赖.两边pom都一样 第一次练习,启动生产者后,再启动消费者,一直报找不到 队列的声明. 后排查发现是 需要现在生产者这边浏览器访问一次生产消息的方法 ...
- log4j2分层输出日志
在java mvc框架开发过程中,我们经常的将代码分为类似controller(控制层).service(业务层).rpc(远程接口调用层).dao(数据层)等层级,如果将所有层级的日志全部都打到一个 ...
- MyBatis_注解式开发
一.注解式开发 mybatis的注解主要替换映射文件. 二.基础语法 注解首字母大写,因为注解与类.接口是同一级别的(类同一层级的:类,接口,注解,枚举).一个注解,后台对应着一个@interface ...
- Js窗口嵌套
<script type="text/javascript"> if (window.parent.window != window) { window.top.loc ...
- ajax提交手机号去数据库验证并返回状态值
<script type="text/javascript"> $(function(){ $('.agree_regi').click(function(){ var ...
- Failed to create the part's controls解决方法
今早打开eclipse,所有的文件均打不开,如下所示: 因为项目从tomcat迁移到weblogic,JDK版本从1.8降到了1.6,EL表达式有些也解析不了,猜想是这其中出现了问题. 解决方法: F ...
- 139.00.005 Git学习-分支管理
@(139 - Environment Settings | 环境配置) 一.Why? 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交, ...
- vue2.0路由写法、传参和嵌套
前置知识请戳这里 vue-routerCDN地址:https://unpkg.com/vue-router@3.0.1/dist/vue-router.js vue-router下载地址:https: ...
- 使用spring aop遇到的坑
1.aop 切点配置无误但只对控制器无效. 检测你的aop开启配置是否放在了spring配置文件中,如果是请把它移到mvc配置文件中. 我们知道当spring项目使用了spring mvc时,项目是存 ...
- MySQL5.7二进制安装
MySQL-5.7.14从零开始-安装 首先我们要选择下载MySQL的版本: 登录官方网站下载:https://dev.mysql.com/downloads/mysql/ 下面我们选择5.7.14的 ...