hdu6444 Neko's Loop
要想A一道题,你需要正版ide,正版草稿纸,正版键盘,正版双手,但最重要的是正版大脑.(改编自wxf在微积分群的吐槽)
分析一下题意,选的所有数的下标模gcd(n,k)都是同余的,而且是在所有同余的下标上循环.
对不同余数的下标分别处理,分别转换为在一串长度为N=n/gcd(n,k)的数上一格一格往右边走,走到头循环回来时,走m步最多能得到多大的和.
考虑对所有数字求个和sum.如果sum<0,那么最优方案走的步数不会超过N(否则少走连续N步一定使答案变优),只需要单调队列求带长度限制的最大区间和.
如果sum>0,那么只要m>N,则最优方案走的步数不会少于m-N步(否则多走N步使得答案变大)
sum>0的时候解题的想法还是要转化为求一个最大区间和.以走m/N*N步的方案为基准(这个方案不管从哪里开始走都得到相同的答案),考虑多走或者少走几步,但是总步数在[m-N,m]变化.多走几步的情况就是找一个带长度限制的最大区间和,少走几步的情况就是找一个带长度限制的最小区间和把它从答案里去掉.都是单调队列就能搞定.借助函数指针可以把最大区间和以及最小区间和写成一个函数.
#include<cstdio>
typedef long long ll;
const int maxn=10005;
ll max(ll a,ll b){
return a>b?a:b;
}
ll min(ll a,ll b){
return a<b?a:b;
}
int a[maxn],b[maxn];
ll pre[maxn<<1];
int gcd(int a,int b){
return (b==0)?a:gcd(b,a%b);
}
int q[maxn<<1];
int head=0,tail=0;
void push(int x,ll cmp(ll,ll)){
while(head!=tail&&(cmp(pre[x],pre[q[tail-1]])==pre[q[tail-1]]))tail--;
q[tail++]=x;
}
void pop(int lim){
while(head!=tail&&q[head]<=lim)head++;
}
ll get_extreme(int N,int M,ll cmp(ll,ll)){
ll ans=0;head=tail=0;
push(0,cmp);
for(int i=1;i<=N;++i){
ans=cmp(ans,pre[i]-pre[q[head]]);
push(i,cmp);
pop(i-M);
}
return ans;
}
ll calc(){
int n;ll s;int m,k;
scanf("%d%lld%d%d",&n,&s,&m,&k);
for(int i=0;i<n;++i)scanf("%d",a+i);
int period=gcd(n,k);
int N=n/period;
ll ans=0;
for(int i=0;i<period;++i){
for(int j=i,p=0;p<N;j=(j+k)%n){
b[++p]=a[j];
}
pre[0]=0;
for(int j=1;j<=N;++j)pre[j]=pre[j-1]+b[j];
for(int j=1;j<=N;++j)pre[j+N]=pre[j]+pre[N];
if(pre[N]<=0||m<=N){
ans=max(ans,get_extreme(2*N,min(N,m),max));
}else{
int mm=m/N*N;
int hidlt=m-mm;
int lodlt=N-hidlt;
ans=max(ans,m/N*1ll*pre[N]+get_extreme(2*N,hidlt,max));
ans=max(ans,m/N*1ll*pre[N]-get_extreme(2*N,lodlt,min));
}
}
return max(0,s-ans);
}
int main(){
int T;scanf("%d",&T);
for(int i=1;i<=T;++i){
printf("Case #%d: %lld\n",i,calc());
}
return 0;
}
hdu6444 Neko's Loop的更多相关文章
- 2018 CCPC网络赛 hdu6444 Neko's loop
题目描述: Neko has a loop of size n.The loop has a happy value ai on the i−th(0≤i≤n−1) grid. Neko likes ...
- hdu6444 2018中国大学生程序设计竞赛 - 网络选拔赛 1007 Neko's loop
Neko's loop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total S ...
- hdu 6444 网络赛 Neko's loop(单调队列 + 裴蜀定理)题解
题意:有编号为0~n-1的n个游戏,每个活动都有一个价值(可为负),给你m,s和k,你可以从任意一个编号开始玩,但是下一个游戏必须是编号为(i + k)%n的游戏,你最多能玩m次游戏,问你如果最后你手 ...
- hdu 6444 Neko's loop 单调队列优化DP
Neko's loop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- Neko's loop HDU-6444(网络赛1007)
题意就是给出n个数,在n个数上每次跳k个数,最多可以跳m次,你可以选择跳任意次,也可以都不跳,问你为了达到目标了快乐值至少在开始的需要多少快乐值. 题目可以转换成找出循环节,然后再循环节上疯狂试探我可 ...
- HDU 6444 Neko's loop(单调队列)
Neko has a loop of size nn. The loop has a happy value aiai on the i−th(0≤i≤n−1)i−th(0≤i≤n−1) grid. ...
- HDU - 6444 Neko's loop(循环节+最大子段和)
http://acm.hdu.edu.cn/showproblem.php?pid=6444 题意 一个有n个数的环,每次循环走k步,走到每个点都有具体的权值,问在任意点出发最多走m步的情况下,一开始 ...
- 【hdu 6444】Neko's loop
[链接] 我是链接,点我呀:) [题意] 给你一个序列. 你可以选择起点i. 然后每次往右跳k次. 得到下一个值a[i+k];. 问你跳m次能得到的最大值ma是多少. 如果>=s输出0 否则输出 ...
- HDU 6444 Neko's loop ( 2018 CCPC 网络赛 && 裴蜀定理 && 线段树 )
题目链接 题意 : 给出一个 n 个元素的环.可以任意选择起点.选完起点后.可以行走 m 步.每次前进 k 个单位.所走到的点将产生正或负贡献.问你一开始得准备多少才能使得初始资金加上在环上获取最大利 ...
随机推荐
- iis配置绑定二级域名的问题
最近用destoon给客户做一个网站,涉及到站内企业网站的二级域名解析的问题,iis怎么配置绑定子目录绑定二级域名呢,查了好多资料,没有一个给出具体步骤的 基本是一些概念,不过看了这些东西基本理解了泛 ...
- Underscore.js 入门-常用方法介绍
Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程.MVC框架Backbone.js就将这个库作为自 ...
- day72
今日内容: 1 创建多表模型(详情见代码) from django.db import models # Create your models here. class Publish(models.M ...
- 《Head First 设计模式》[01] 策略模式
<Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...
- IC设计推荐书籍
IC设计推荐书籍 听语音 | 浏览:779 | 更新:2014-07-19 10:52 1 2 3 4 5 6 7 分步阅读 接触IC设计这一行已经有7年的时间了,前面4年是大学本科,用来学习知识,现 ...
- webSphere-Eclipse中配置was的远程调试
目前我们项目中使用的应用服务器多是WebSphere,一直苦于无法进行调试,今天在网上看到一篇,原文是 http://www.cnblogs.com/newstar/archive/2010/04/1 ...
- Eclipse安装Git插件(在线和离线)
在线安装: help-->install new software-->add location就是安装的地址:http://download.eclipse.org/egit/updat ...
- 20155211 Exp4 恶意代码分析
20155211 Exp4 恶意代码分析 实践目标 1 监控你自己系统的运行状态,看有没有可疑的程序在运行. 2 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或 ...
- What's new in XAML of .NET 4.0( .NET 4.0中XAML的新功能 )
原文 What's new in XAML of .NET 4.0 What's new in XAML of .NET 4.0 Easy Object References with {x:Refe ...
- PostgreSQL内部结构与源代码研究索引页
磨砺技术珠矶,践行数据之道,追求卓越价值 luckyjackgao@gmail.com 返回顶级页:PostgreSQL索引页 本页记录所有本人所写的PostgreSQL的内部结构和源代码研究相关文摘 ...