CF1358D The Best Vacation
思路
做这道题主要是需要发现一个性质:选择的区间必定是从某一个月的最后一天开始往前连续的一段区间。
考虑如何证明这个结论,设这个月有 \(x\) 天,假设有更优的方案满足到下一个月的第 \(y\) 天,则我们发现下一个月中的拥抱数为 \(\sum_{i=1}^{y} i\),而显然任意一个长度为 \(y\) 的区间的最小拥抱数就是这个值,我们往前移动一定不劣于这个解。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int const N=1e6+10;
int a[N],sum[N],qsum[N];
inline int check(int l,int r){return qsum[r]-qsum[l-1];}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n,x;cin>>n>>x;int ans=0;
for (int i=1;i<=n;++i) cin>>a[i],qsum[i]=qsum[i-1]+a[i],sum[i]=sum[i-1]+(1+a[i])*a[i]/2;
for (int i=1;i<=n;++i) a[i+n]=a[i];
n<<=1;
for (int i=1;i<=n;++i) qsum[i]=qsum[i-1]+a[i],sum[i]=sum[i-1]+(1+a[i])*a[i]/2;
for (int i=(n/2);i<=n;++i){
int l=1,r=i;
while (l<r){
if (l+1==r){if (check(r,i)<=x);else l=r;break;}
int mid=(l+r)>>1;
if (check(mid,i)<=x) r=mid-1;
else l=mid;
}
++l;
int q=x-(qsum[i]-qsum[l-1]);
int summ;
if (l>i+1) summ=0;
else summ=sum[i]-sum[l-1]+(a[l-1]+(a[l-1]-q+1))*q/2;
ans=max(ans,summ);
}
cout<<ans<<'\n';
return 0;
}
CF1358D The Best Vacation的更多相关文章
- 【BZOJ】【3550】【ONTAK2010】Vacation
网络流/费用流 Orz太神犇了这题…… 我一开始想成跟Intervals那题一样了……每个数a[i]相当于覆盖了(a[i]-n,a[i]+n)这个区间……但是这样是错的!!随便就找出反例了……我居然还 ...
- BZOJ3550: [ONTAK2010]Vacation
3550: [ONTAK2010]Vacation Time Limit: 10 Sec Memory Limit: 96 MBSubmit: 91 Solved: 71[Submit][Stat ...
- uva 10192 Vacation(最长公共子)
uva 10192 Vacation The Problem You are planning to take some rest and to go out on vacation, but you ...
- 568. Maximum Vacation Days
Problem statement: LeetCode wants to give one of its best employees the option to travel among N ci ...
- [LeetCode] Maximum Vacation Days 最大化休假日
LeetCode wants to give one of its best employees the option to travel among N cities to collect algo ...
- Atcoder C - Vacation ( DP )
C - Vacation Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Taro' ...
- Holiday、Vacation、Days off、Leave、Break
http://write.scu.edu.tw/view.php?bd=mistake&no=25 這些字在英文的用法中都有放假.休息的意思,但用法卻不太一樣,接下來就來看看它們的不同吧. 『 ...
- bzoj 4097: [Usaco2013 dec]Vacation Planning
4097: [Usaco2013 dec]Vacation Planning Description Air Bovinia is planning to connect the N farms (1 ...
- UVA.10192 Vacation (DP LCS)
UVA.10192 Vacation (DP LCS) 题意分析 某人要指定旅游路线,父母分别给出了一系列城市的旅游顺序,求满足父母建议的最大的城市数量是多少. 对于父母的建议分别作为2个子串,对其做 ...
- BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划
BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得 ...
随机推荐
- 【每日一题】【判断栈是否为空的方法】2022年1月9日-NC76 用两个栈实现队列的出队入队【入队简单】
描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保证pop操作时队列内已有元素 ...
- JAVA里Map的一些常用方法
Map的常用方法 案例1 场景:一张建行用户体验金信息大表(百万级别),里面存在一个字段对多条数据,需要统计某个字段的多条数据累加值以供于别的服务调用. 优化前解决:直接查出来一个大list给到另一个 ...
- android nativate 动态注册 静态注册
说明:在java函数的入口比较容易分析, 把activity的生命周期或者关键函数通过放在so层,分析起来就困难多了 1.在MainActivity中 package com.demo.nativat ...
- 什么是JS?JS的用途?
一.JavaScript是什么?它有什么作用? JavaScript是一种运行在客户端的脚本语言,简称JS,属于解释性语言.它是一行翻译执行完以后再进行下一行,代码不进行预编译. JavaScript ...
- web框架推导 wsgiref模块 jinja2模板语法 django框架简介 django基本操作
目录 纯手撸web框架 web框架的本质 手写web框架 存在的问题 基于wsgiref模块 基本介绍 推导流程 代码封装优化 总结 动静态网页 jinja2模块 前端.后端.数据库三者联动 推导流程 ...
- 从源码构建docker-ce
准备环境 准备一台Linux主机,并在上面安装好docker-ce,安装好make,git就可以开始编译工作了.对,就是如此简单,可能你会对此感到异或为啥要装docker,我不是准备编译这个玩意么,为 ...
- elementui中 分页在vue中的使用
template中: <el-pagination background layout="prev, pager, next" :total="total&quo ...
- 10、比较Bigdecimal类型是否相等的方法
一.Bigdecimal.equals()详解: Bigdecimal的equals方法不仅仅比较值的大小是否相等,首先比较的是scale(scale是bigdecimal的保留小数点位数),也就是说 ...
- Loj 507 接竹竿 题解
Loj链接:接竹竿 $ {\scr \color {SkyBlue}{\text{Solution}}} $ 题目大意: 给定一个数组,每次加入一种颜色的数,可以取走与它颜色相同的两个数之间的所有数, ...
- py教学之元组
元组介绍 Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号 ( ),列表使用方括号 [ ]. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. tup1 = ...