正题

题目链接:https://www.luogu.com.cn/problem/AT3949


题目大意

长度为LLL的坐标轴上,给出nnn个点,每个点xix_ixi​需要购物tit_iti​的时间,一辆车在0∼L0\sim L0∼L折返跑,求从000出发购物完回到000的最短时间。

n∈[1,3×105],L∈[1,109]n\in[1,3\times 10^5],L\in[1,10^9]n∈[1,3×105],L∈[1,109],输入的xix_ixi​单调递增。


解题思路

挺奇妙的题目,WC2021WC2021WC2021讲课的题。

首先每个tit_iti​先%\%%上一个2×L2\times L2×L。然后把那些2×L2\times L2×L加到答案里先,这些无可避免。

然后考虑一个点,如果从右边进只需要到达一次端点就视为左括号,如果从右边进只需要到达一次端点就视为右括号。

先默认每个点的贡献都是2×L2\times L2×L,显然一个左括号和一个右括号匹配可以减少2×L2\times L2×L的贡献,因为如果先走右边那个再来走左边那个,这样他们的贡献和就是2×L2\times L2×L。

而有些点既可以视为左又可以视为右,此时我们需要最大化匹配数。

其实还有一个性质,如果一个节点开始固定作为左括号,那么它后面的一定不会有固定作为右括号的(拿作为左右括号的条件看一下就能理解了)。所以不会有两个固定的括号匹配。

然后就可以直接贪心匹配了,时间复杂度O(n)O(n)O(n)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=3e5+10;
int n,len,x[N],t[N],l[N],r[N],ans;
int main()
{scanf("%d%d",&n,&len);for(int i=1;i<=n;i++)scanf("%d",&x[i]);for(int i=1;i<=n;i++)scanf("%d",&t[i]);for(int i=1;i<=n;i++){ans+=t[i]/(2*len);t[i]%=2*len;if(!t[i]){ans--;continue;}l[i]=(t[i]<=x[i]*2);r[i]=(t[i]<=(len-x[i])*2);}int lim=n,L=0,R=0;ans+=n+1-r[n];for(int i=1;i<n;i++){if(!l[i]&&!r[i])continue;if(!r[i]){lim=i;break;}if(!l[i]&&L)L--,ans--;else if(l[i]) L++;}for(int i=n-1;i>=lim;i--){if(!l[i]&&!r[i])continue;if(!l[i])break;if(!r[i]&&R)R--,ans--;else if(r[i]) R++;}ans-=(L+R)>>1;printf("%lld\n",2ll*ans*len);return 0;
}

AT3949-[AGC022D]Shopping【贪心】相关推荐

  1. [总结]2019年10月 OI学习/刷题记录

    10月份记录! 2019/10/1 UOJ #74. [UR #6]破解密码 Hash+分类讨论 UOJ #75. [UR #6]智商锁 Matrix-Tree定理+随机化 UOJ #76. [UR ...

  2. 牛客竞赛语法入门班数组模拟、枚举、贪心习题【未完结】

    题目地址: https://ac.nowcoder.com/acm/contest/19851?from=acdiscuss 目录 四舍五入 安卓图案解锁 Captcha Cracker 回文数 [N ...

  3. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  4. 【CodeForces - 545 ABCDE套题训练题解】贪心, 构造,模拟,dp,最短路树(Dijkstra+变形)

    A: 题干: Input The first line contains integer n (1 ≤ n ≤ 100) - the number of cars. Each of the next  ...

  5. codeforces D. Fedor and coupons 贪心+优先队列

    题目地址:点击打开链接 D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes i ...

  6. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  7. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  8. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  9. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

最新文章

  1. udp tcp ip 校验和对比
  2. SVM学习(四):为何需要核函数
  3. python 抓包 上传 文件_Python接口测试文件上传实例解析
  4. Lucene就是这么简单
  5. centos8安装ss发生错误failed to install pthon
  6. MTK手机充电原理分析及问题总结
  7. codesys file读写配置参数程序
  8. POS机交易支付知识点整理
  9. linux ntfs u盘启动盘,u盘NTFS格式制作PE+CDlinux+ubuntu多系统启动盘
  10. 插入安装光盘并重新启动计算机,电脑开机时显示 插入windows安装光盘并重新启动计算机 怎么解决 急救...
  11. 易到用车构架演进及上云探索
  12. 唤醒手腕Python全栈工程师学习笔记(人工智能篇)
  13. 易捷web文件服务器软件,易捷文件共享Web服务器
  14. Docker容器化开发流程(一)介绍
  15. OpenGL颜色渐变
  16. oracle 自定义数据类型
  17. 电源系列2:LDO 基本 原理(二)
  18. 如何在K8S上备份和恢复MySQL
  19. 电脑无法安装Android设备驱动
  20. mybatis之注解开发与逆向工程

热门文章

  1. 我已经把它摸的透透的了!!!Spring 动态数据源设计实践,全面解析
  2. php 异常 重试,Python中异常重试的解决方案详解
  3. 如何讲页面打入jar包中_如何把我的Java程序变成exe文件?
  4. 计算机显卡是指什么时候,电脑哪个是显卡
  5. android shell用户界面,shell界面下安装和卸载Android应用程序(apk包)
  6. mysql anyvalue函数_Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式
  7. leetcode654. 最大二叉树
  8. 77. 组合016(回溯法)
  9. Numpy中数组创建函数的辨析
  10. LED计数电路,5输入按键编码器,7段数码管显示驱动集成为LED计数测试电路