BZOJ 4368: [IOI2015]boxes纪念品盒】的更多相关文章

三种路径,左边出去左边回来,右边出去右边回来,绕一圈 绕一圈的路径最多出现一次 那么绕一圈的路径覆盖的点一定是左边半圈的右边和右边半圈的左边 枚举绕一圈的路径的起始点(一定要枚举,这一步不能贪心),更新答案 #include<cstdio> #include<algorithm> using namespace std; int a[10000005],X[10000005],Y[10000005]; long long L[10000005],R[10000005]; bool…
题意:给定一个环,环上有一些点包裹,你要从 $0$ 号点出发,然后每次带上一个容量为 $k$ 的背包. 问:如果要把所有的包裹都带回 $0$ 好点最少要走多少距离. 每一次只有 $3$ 种走法:走整圆,没走到半圆就返回(两个方向) 而我们可以贪心证明我们最多只会走一次整圆: 如果我们要走 $2$ 次或两次以上整圆的话说明要拿的物品肯定 $>2k$ 个. 而背包的容量是有限的:只能装 $k$ 个. 所以这么走是不如先装物品多的那一侧半圆,然后再跑一次整圆. 然后就好做了:直接对每一侧半圆求取前 $…
4368: [IOI2015]boxes纪念品盒 链接 分析 链接 代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; inline int read() { ,f=;; +ch-';return x*f; } ; int s1[N],s2[N],p1,p2; LL f1[N],f2[N]; //- int main() { int n = read(),k = read(),L = read(); ; i…
BZOJ 4368: [IOI2015]boxes纪念品盒 BZOJ传送门 Description IOI2015开幕式正在进行最后一个环节.按计划在开幕式期间,每个代表队都将收到由主办方发放的一个装有纪念品的盒子.然而所有志愿者都被精彩的开幕式所吸引,除Aman外其他人完全忘记了发放纪念品这件事.Aman是一位热情的志愿者,为使得IOI尽量圆满,他要用最短的时间将所有纪念品发放出去. 开幕式的场地是一个圆环,被分为 个完全相等的区域,这些区域的编号依次为 到,也就是说,对于0≤i≤L-2,区域…
bzoj4368 IOI2015 boxes纪念品盒 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4368 数据范围:略. 题解: 如果在一个最优方案中,一个点$i$是这个人拿东西从左侧走过来的,我们就说这个点是蓝的. 如果是右侧的,就说这个点是红. 我们发现,并不存在三个可以不连续的点,满足红蓝红. 即,一定存在一个点$i$,满足$1\sim i$的点是蓝的,$i + 1\sim n$是红的. 接着我们维护一个$dp$状态:$f_i$,表…
问题描述 IOI2015 开幕式正在进行最后一个环节.按计划在开幕式期间,每个代表队都将收到由主办方发放的一个装有纪念品的盒子.然而所有志愿者都被精彩的开幕式所吸引,除 Aman外其他人完全忘记了发放纪念品这件事.Aman 是一位热情的志愿者,为使得 IOI 尽量圆满,他要用最短的时间将所有纪念品发放出去. 开幕式的场地是一个圆环,被分为 个完全相等的区域,这些区域的编号依次为 0 到 L-1,也就是说,对于 0≤i≤L-2,区域 i 与区域 i+1 相邻,且区域 L-1 与区域 0 相邻.场地…
题面 解析 可以发现,发纪念品有三种方式: 从左边走再原路返回. 从右边走再原路返回. 走一圈. 注意到,第三种走法最多只会走一次, 因为如果走了多次,那发放的物品数量就会>=\(2k\), 那么一定有半边的数量>=\(k\). 因此就可以转化为一次1/2操作加一次3操作(先发掉\(k\)个). 那么我们可以先DP一下1/2操作发前\(i\)个纪念品所用的时间\(f1[i]/f2[i]\), 那没有3操作的时间就是f1+f2, 考虑走一圈的情况,枚举从左边走发的纪念品数更新答案即可. code…
题目 似乎很久没写题解了... 这题是校里胡策的时候的题,比赛因为评测机有点慢+自己代码常数大没快读...被卡t了,但是bzoj上还是A了的...,因为bzoj时限比较宽可以不卡常. 题解: 首先可以发现答案与操作顺序是无关的,也就是说,可以钦定答案就是x次操作,然后让先手的x次先全换了,然后再考虑我要怎么换,才能在最少次数内换成升序. 于是就可以直接枚举答案x,然后判一下x是否可行. 考虑如何判断,问题会变成,给定一个a序列,每次可以交换两个数,问最少交换多少次可以换成升序,也就是变成a[i]…
Description 给出一个环形,n个点,每次只能访问k个点,求最短距离. Sol 贪心. CCF的题解. 首先只会最多走一趟环形,根据抽屉原理,如果一边不足k个才会到另一边,所以对于第二次以上的环形可以分别拆到两边. PS:人生第一道交互题. Code typedef long long LL; const int N = 20000005; LL f[N],g[N]; LL delivery(int n, int k, int L, int pos[]){ LL res=(LL)n*L;…
把一个人看成二维平面上的一个点,把一个K[i]看成左上角为(0,+max),右下角为(K[i],K[i])的一个矩阵,那么可以很好地描述人对于询问是否合法(我也不知道他怎么想到这东西的) 然后把一组询问排序,按照K[i]从小到大依次处理,定义一个取点的方式为尽量取纵坐标小的点,那么可以构造出一种方案使得对于每一块区域不能取的点的最大纵坐标递减 (我也不知道他怎么想到这东西的) 单调栈维护每一块被取过的点的最大纵坐标,那么随着K[i]的增大,区域会被合并 二维平面数点,主席树 #include<c…