贪心
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
[loj#560]Menci的序列
题目大意一个人长度为n的字符串s,只包含+和*。 选出一个子序列,然后你有一个ret,初始为0,按顺序扫你选出的这个子序列。 如果碰到的是+,ret+1,否则ret*2。 最大化ret%2^k。做法lca题解写的真麻烦。 首先我们可以看成,每个+贡献2^c,c为该+后面的*数量。 然后就能注意到: * + + + + * + 这两个是等价的。 因此假如出现连续三个+,...原创 2018-07-05 22:02:27 · 1308 阅读 · 0 评论 -
[agc003d]Anticube
前言简单贪心,最难的部分居然是分解质因数。题目大意从一个10^10的数列里选出最多的数,使两两乘积不为立方数。做法把每个数最简表示,即每个质因数的指数都模3。 还要求出这个最简数的补数,也就是满足最简的与其乘积为立方数的数。 对于数列中一个数集团和它的补数集团,贪心的选择较大的那个。 如果一个数和其补数相等,则只能选1个。 重点是求最简数以及补数。 枚举1010310^{\frac{10}原创 2017-10-27 10:04:50 · 1122 阅读 · 0 评论 -
[agc009d]Uninity
前言我居然一开始觉得点分治最优秀。题目大意类似点分治过程,只不过分治中心任意选择。 求点分树最小深度。做法首先直接点分治深度不超过log,所以答案上界是log。 假设我们给每个点一个标号表示它在点分树的深度。 那么我们发现,对于两个标号同为k的点,它们的路径上一定存在一个点的标号大于k。 我们定义一个数k对于子树x是良好的,要满足x的标号为k或x子树中存在一点y标号为k且y到x路径上没有标号原创 2017-10-18 21:48:33 · 958 阅读 · 0 评论 -
[agc009b]Tournament
前言简单题。题目大意若干轮比赛,每个人在某一轮可以参赛,和另外一个人pk,输的人淘汰。 最后1是冠军,已知其余每个人输给了谁,请问最少设置多少轮比赛?做法你显然可以根据每个人输给了谁建一颗树,然后处理f[x]表示x淘汰所有输给他的人所需要的最小轮数。 转移很简单,根据儿子的f排序,然后详见代码(不会说)。#include<cstdio>#include<algorithm>#define f原创 2017-10-17 22:12:40 · 700 阅读 · 0 评论 -
[agc010e]Rearranging
前言想到了相对顺序和连图。 想到了多个合并。 似乎没想到按照大小连出拓扑图,导致不知道怎么样才是最小不可操作的。题目大意一个长度为n的序列。 先手可以任意打乱,然后后手可以执行若干次以下操作:交换两个相邻且互质的数。 先手希望字典序最小,后手希望字典序最大,最后序列会变成啥样?做法容易发现对于不互质的一对数,相对位置永远不变。 我们让不互质的数之间连一条边,这样形成了图。 我们不妨从小到原创 2017-10-17 17:31:24 · 975 阅读 · 0 评论 -
[agc018d]Tree and Hamilton Path
前言做过类似的idea题。题目大意给你一棵树,然后你需要找到一个n的排列[,使得 ∑n−1i=1dis(pi,pi+1)\sum_{i=1}^{n-1}dis(p_i,p_{i+1}) 最大,输出答案即可。做法假设p1=s,pn=t。 我们提取重心作为根。 设sum为深度和。 答案为2∗sum−dep[s]−dep[t]−∑n−1i=1dep[lca(pi,pi+1)]2*sum-dep[原创 2017-10-07 16:16:40 · 766 阅读 · 0 评论 -
[agc014d]Black and White Tree
前言看到这种题直觉是树的最大匹配,如果是比赛直接打毫无疑问。 然后证明了一下也不是很难的样子。 主要是见过类似套路吧。题意两个人轮流给树上节点染色。 先手涂白色,后手涂黑色。 如果最后树上存在一个白色点,与其相连的没有黑点,先手胜,否则后手胜。 请你判断先手必胜还是后手必胜。博弈我们先给出结论:后手要赢,这颗树要有完美匹配。 首先充分性显然,有完美匹配,先手涂什么成白色,你把匹配点涂黑,原创 2017-09-26 21:09:50 · 1092 阅读 · 3 评论 -
[agc012e]Camel and Oases
前言很容易的就发现了只有log次跳跃。 然后状压DP。 似乎就是个简单题吧(怎么比12c还简单)题意一排点,两点间有距离。 初始你有一个行走值v,如果相邻两点距离不超过v你可以自由在这两点行走。 当v大于0时,你可以选择某一时刻突然飞到任意点,这样做后v会减半(下取整)。 问从每个位置初始出发能否到达所有位置。DP预处理left[i,j]表示在i行走值已经减半j次能往左走到哪,同理有rig原创 2017-09-23 11:19:45 · 680 阅读 · 0 评论 -
[agc012d]Colorful Balls
前言做这题时感觉肯定是有一堆球允许重排的,要求找到每种颜色这些球的个数,其余球大概都是固定的,应该不复杂。 大概思路也确实就是这样。不过需要仔细讨论。 有一个很重要的性质当然是a和b如果都能和c对换,a和b也是可以对换的。题意n个球,每个都有颜色和重量。 对于两个同颜色的球,如果重量和在x以内可以交换位置。 对于两个不同颜色的球,如果重量和在y以内可以交换位置。 问颜色序列的方案数。做法一原创 2017-09-22 22:04:03 · 745 阅读 · 1 评论 -
[LibreOJ β Round #4]子集
题目大意给你一个集合,请选出一个子集,使得两两元素的gcd或分别+1后的gcd至少一个不等于1,最大化子集的大小。最大团看起来是个最大团模型,裸上random_shuffle+greedy可过。#include<cstdio>#include<algorithm>#include<map>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace s原创 2017-09-04 22:34:34 · 487 阅读 · 0 评论 -
[bzoj3060]Tour de Byteotia
题目大意给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上。贪心把两边编号都>k的边先加入。 再把剩余的边加入,若形成环就删去新加边。 闭上眼睛感受当然最优。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int原创 2017-07-07 16:58:43 · 548 阅读 · 0 评论 -
电报
题目大意n个点,每个点出度均为1的有向图。 你可以将j->k改成j->l,代价为c[j]。 求最小代价,使得有向图变成一个环。贪心我们把问题描述成删去若干条边,删除每条边都有代价,最小代价使得每个联通块都是一条链(这样才能连成环)。 假如一个点有k个入度,至少k-1个要被删掉。 对于树的情况贪心保留最大代价的入边。 环上至少一条边要删去,再讨论一下即可。 注意特判初始所有点连成一个环的情原创 2017-06-23 17:05:25 · 753 阅读 · 0 评论 -
[CF480A]Exams
题目描述懒得写贪心排序,a第一关键字b第二关键字。 然后优先选b,不行选a。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=5000+10;struct dong{ int a,b;} a[maxn];int i,j原创 2017-06-11 16:06:28 · 281 阅读 · 0 评论 -
字符串游戏
题目大意题解瞎猜想和画图得到一个不好说的结论。 用诡异的单调栈做。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=1000000+10;char a[max原创 2017-06-22 20:16:12 · 617 阅读 · 0 评论 -
摧毁图状树
题目大意Q次询问,每次给一个k。 将树用尽量少的长度不超过k的祖先后代链覆盖,使得每个点至少覆盖一次。贪心对偶成选择尽量多的点,使得任意长度不超过k的祖先后代链上至多一个点被选择。 这样转化则贪心很显然。尽量选深度大的点。 如果有t个叶子,选取的点至多为t+(n-t)/k。 因为叶子一定会被选择,同样删去所有被选择的点后,每个联通块大小不会小于k(否则一定在原来的树中存在长度不超过k的祖先后原创 2017-06-28 19:24:21 · 715 阅读 · 0 评论 -
叶片
题目描述一个圆形涡轮上有N 个叶片均匀围成一圈,按顺时针1 到N 标号,其中有一些叶片损坏了。现在要把损坏的叶片给拆下来,但是为了使涡轮正常工作,它的重心还应该落在中心上。求最少还要再拆下几个叶片才能实现目标。贪心设n=p^xq^y 按n/p和n/q为循环写出若干矩阵。 每个矩阵内只能只取横或只取竖。 贪心计算。 (我的程序有点水啊?)#include<cstdio>#include<al原创 2017-05-04 15:41:39 · 697 阅读 · 0 评论 -
IQ测试
题目描述PTY进行IQ测试,测试的项目是判断一个序列是否是另外一个序列删除若干个数字之后得 到的,PTY 深知自己的IQ 低于sqrt(-1),所以他请来了智商超高的你来替他解决问题。乱做水题#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;原创 2017-04-12 22:05:01 · 1065 阅读 · 0 评论 -
跳蚤王国
题目描述跳蚤王国爆发了一场动乱,国王在镇压动乱的同时,需要在跳蚤国地方钦定一个人来做宰相。 然而当时国王的钦定方式很奇怪,跳蚤王国可以看成一棵树,国王认为宰相必须更好地位跳蚤服务,所以他会选择一个到所有节点距离和最小的节点,并在这个节点中钦定,如果有多个节点满足距离和最小则任选一个。 然而跳蚤国的动乱实在是太厉害了,以至于树的心态可能也会发生改变也就是说,树上可能会有若干条边消失,如果这个情况出原创 2017-03-25 16:45:47 · 820 阅读 · 0 评论 -
[agc008d]K-th K
前言简单构造,一开始看错题瞎写了一发。题目大意给了一个长度为n的序列x。 请构造一个长度为n*n的序列a,只包含1~n这n个元素,每个元素出现n次,且对于元素i,a的第xi个位置是元素i,且前xi个位置恰好有i个i。构造显然可以正反各贪心一遍,不懂就看程序,正确性显然。 瞎填以后还可以n^3验证。#include<cstdio>#include<algorithm>#define fo(i,原创 2017-10-19 17:15:16 · 595 阅读 · 0 评论 -
[agc019c]Fountain Walk
前言这是一道比较简单的题。 但是我没想好答案增大的情况,所以我一开始觉得细节讨论有点麻烦。。题目大意不想说,看网站做法先通过一系列翻转交换等满足x1<=x2,y1<=y2。 我们注意经过温泉有减少答案(走1/4圆) 和增加答案(走1/2圆)两种。 我们不希望增加答案,希望尽量减少答案。 由于减少答案很少,矩形边长很大,因此我们不能为了走温泉绕弯路,只能向右向上走。 然后对这个矩形内的点按原创 2017-10-10 21:33:58 · 732 阅读 · 0 评论 -
[SRM695-900]BearEmptyCoin
题目大意有一个两面为空的硬币,正面和反面有区别。 你需要甩kkk次,每次其会有一面朝上,如果该面为空,你填一个整数上去,若不为空,获得该分数。 你希望最大化分数和为sss的概率。做法如果s mod k=0s mod k=0s\ mod\ k=0显然我们不管哪面都会填s/ks/ks/k,输出2k2k2^k。 你能决定的是第一次摇到第2个面时,...原创 2018-06-03 15:27:49 · 550 阅读 · 0 评论 -
[UOJ#84]水题走四方
题目大意一颗树,两个人初始从根节点出发,每一步每个人可以选择原地不动或者走向某个儿子。一步后,一个人可以瞬移到另一个人所在节点上。 最少需要多少步,使得每个节点都被遍历过?做法我们可以认为存在一个本体以及一个分身,每次都是分身瞬移到本体的位置。 如果本体A和分身B在节点C分道扬镳,本体A在D节点瞬移至分身B所在的节点E,干脆一开始便让本体A往E走,分身B往D走。因此瞬移的总是分身。 最后一定是原创 2018-04-12 11:32:02 · 688 阅读 · 0 评论 -
[bzoj3716]Muzeum
题目大意商场是一个平面直角坐标系。 lihua想要来偷珠宝,一共有nnn个珠宝,分布在不同的位置,第iii个珠宝在(axi,ayi)(axi,ayi)(ax_i,ay_i)有价值为aviaviav_i。 但是有mmm个保安,第iii个保安在(bxi,byi)(bxi,byi)(bx_i,by_i),lihua贿赂他需要bvibvibv_i的代价。 每个保安都有一个相同的视野角度θ。 如...原创 2018-03-26 22:41:45 · 514 阅读 · 0 评论 -
[Neerc2013]Dictionary
题目大意给你n个长度不超过10的小写字母字符串。 请你构造一颗节点数最少的字典树。 使得对于任意一个人给定字符串,字典树中都存在一条祖先后代链对应的字符串与其相等。做法首先显然,如果字符串a包含字符串b,可以直接剔除字符串b。 我们考虑最优解,一定是按照某个顺序添加字符串进入字典树中。 假设现在有字符串c,可以找到其一个最长前缀,使得该前缀可以被字典树表示,然后把剩余后缀加...原创 2018-03-26 11:39:45 · 482 阅读 · 0 评论 -
[SRM554-500]TheBrickTowerMediumDivOne
题目大意给你一个序列a,定义一个排列b的价值为∑n−1i=1max(bi,bi+1)\sum_{i=1}^{n-1}max(b_i,b_{i+1})。 请你给出一个价值最小的排列,使得其字典序最小。贪心首先,不会出现相邻三个组成了高峰。 否则我们将最高和次高交换,使得价值变得更优。 容易发现最后一定是一个V字形,低谷位置就是最小值。 因此可以得到贪心构造,按编号贪心构造V形左边,剩余排序后成原创 2018-02-28 10:25:28 · 522 阅读 · 0 评论 -
[agc014c]Closed Rooms
题目大意一个网格图,从一个起点出发。 有些格子上锁。 每一轮你都可以不断往一个已解锁的四相邻格子走,最多走k次,走完后你可以选择至多k个未解锁的格子,将它们解锁。 求最少多少轮,你能走到一个边界格子。做法发现走的次数和可以解锁的次数相等。 因此第一轮走完,以后都不会撞锁。 bfs求出第一轮能走到的格子,然后计算到边界最小轮数。#include<cstdio>#include<algori原创 2017-11-16 11:28:56 · 772 阅读 · 0 评论 -
[arc080f]Prime Flip
题目大意有无穷个硬币,初始有n个正面向上,其余均正面向下。 你每次可以选择一个奇质数p,并将连续p个硬币都翻转。 问最小操作次数使得所有硬币均正面向下。做法不妨考虑差分。差分后1的数量一定为偶数。 然后一次操作[l,r]会翻转两端l-1与r。 现在问题变成两两配对使得操作次数尽量少。 有三种情况: 1、|i-j|是奇质数,那么1步即可。 2、|i-j|是偶数,那么2步即可。(2可以5-原创 2017-11-03 08:38:50 · 887 阅读 · 0 评论 -
[arc080e]Young Maids
题目大意一个长度为偶数的排列p,每次取出相邻两个数并从p中删除,然后将这两个数按顺序加入q的开头(q初始为空)。 问能得到最小字典序的q。做法在堆中保存若干个区间(l,r),以及从中选出最小的和l奇偶性相同的位置u,以及在这个位置之后最小的和r奇偶性相同的位置v。记作(l,r,u,v)。 然后我们每次从堆中取出a[u]最小的(l,r,u,v),并将u、v加至开头,然后把区间分裂成(l,u-1)(原创 2017-11-03 08:30:46 · 811 阅读 · 0 评论 -
[agc006d]Median Pyramid Hard
前言一道见过的题。题目大意一个长度为奇数的排列,令b[i]=median(a[i],a[i+1],a[i+2])。 median表示中位数。 不断执行上述变化序列最终变成1个数,它是什么?做法二分后变成01序列,考虑最终什么时候会是0。 我们发现相邻两个是同一个数字,这两列都是柱子,即从下到上都一样。 case 1:正中间是0柱子。 case 2:两边最近的柱子都是0柱子。 case 3原创 2017-11-01 14:51:45 · 644 阅读 · 0 评论 -
[agc010c]Cleaning
前言这是一个与经典性质有关的题。题意一颗点权的树。 每次操作你可以选择两个不同的叶子(度数为1的点),满足其间路径任意点点权不为0,然后把这些点点权-1。 是否能通过任意次操作使得所有点点权为0?做法首先判掉n=2那么一定可以找到度数>1的做根。 我们假如把操作这样描述: 一颗点权边权树,初始边权均为0。 每次操作选择两个不同的叶子,将路径上边边权+1。 最后对于每个叶子,其相连所有边边原创 2017-10-14 09:05:40 · 531 阅读 · 0 评论 -
[agc005e]Sugigma: The Showdown
前言要知道怎么判-1,接下来就好办许多了。题目大意一个有红边和蓝边的图,只保留红边或蓝边都是一颗树。 现在A和B初始都在一个点上,轮流进行,A先操作。 A每次可以不动或沿着相邻的红边走到另一节点。 B类似,但只能走蓝边。 A和B相遇游戏结束。 A要最大化游戏时间,B要最小化游戏时间,若A永远不会被B抓到输出-1。做法当A到达一条红树上的边(x,y)的端点时(这条边满足x和y在蓝树的距离大于原创 2017-10-31 10:46:38 · 875 阅读 · 0 评论 -
[agc004f]Namori
前言这题好牛逼啊。题目大意给你一颗全白的树或环套树。 你每次可以选择一条连接两个同色点的边,将两个端点反色。 问变成全黑的最小步数,要求判断无解。树的做法树是一个二分图,看起来很棒的样子。 我们不妨设深度为奇数(根的深度为1)的点是一个空位,而深度为偶数的点有一个硬币。 我们发现,一次操作相当于将一个硬币移到相邻的空位。 最终要求原本是空位的点都被硬币填满。 那么只有硬币数等于空位数才有原创 2017-10-30 15:26:34 · 1679 阅读 · 2 评论 -
[agc004d]Teleporter
前言贪心题,我一开始想错了,最终算法其实很简单。题目大意n个点形成环套树,改变最少数量的点的出边,使得任意点出发走k步能走到1。 初始满足任意点能走到1。做法显然1一定要自环。 然后可以贪心了,自下往上做,满k要断出边。 详见代码。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using nam原创 2017-10-30 14:53:58 · 753 阅读 · 0 评论 -
[agc019f]Yes or No
前言一道数形结合的题目。 发现本质则十分简单(考虑分数相加则麻烦无比)。题意n+m个询问,有n个询问的答案是Yes,其余m个是No。 你依次回答这些询问,每个询问给出Yes或No,给出后告诉你答对了没有。 求最优策略下你期望答对的询问个数。解法不妨令n>=m。 最优策略,选择剩余多的,一样多乱猜一个。 然后画一条y=x的直线。 你假设从一个(i,i)走到(0,0)中途不到对角线。 那么原创 2017-10-12 16:44:05 · 948 阅读 · 0 评论 -
[agc016e]Poor Turkeys
前言感觉不是很难。 虽然一开始想着是废掉的缩点。 仔细想想又没有这样实现的道理。题意n个人。 有m个按时间的暗杀行动。 第i次请杀手杀ai和bi,如果都活着杀手按照心情杀一个,都死了就不杀,只活一个杀死活的那个。 问m次暗杀过后有多少对人可能都存活?题解考虑按时间倒着来。 如果你想要x存活,每当遇到与x有关的,又会出现新的应该存活的。 我们称为存活集合。 每次一个两端均不在存活集合的原创 2017-10-05 20:48:54 · 1001 阅读 · 0 评论 -
[agc016c]+/- Rectangle
前言对着样例构造乱搞过了QAQ题意构造一个n*m的矩阵,每个元素在-1e9~1e9间,每一个大小为h*w的子矩阵和是负数,而整个矩阵的和是正数。构造如果n是h的倍数且m是w的倍数,那么整个矩阵恰好分成若干个h*w的子矩阵,既然每个都是负数,和怎么可能是正数? 然后我们可以设一个d(d是常数比4000小就行然后尽量大比如2000),对于一个(ih,jw),我们填上-(hw-1)d-1,其余位置填上d原创 2017-10-05 17:00:10 · 640 阅读 · 0 评论 -
[agc019d]Shift and Flip
前言这是一个简单题但是我细节一开始没想清楚?题目大意两个01字符串a和b,你可以把a左旋、右旋。 还有一种翻转操作,如果bi=1那么你可以把ai取反。 问a变成b最少操作次数。做法先判断无解,当b中有1时一定有解,全0时如果a不是全0就会GG。 然后看看怎么算答案。 先对每个位置预处理至少左移/右移多少次才能让它对应一个b中有1的位置,分别记为L和R。 我们可以枚举最后的对应位置i。 然原创 2017-10-10 21:40:23 · 786 阅读 · 0 评论 -
围墙
题目描述蛐蛐国准备在和它的一个邻国——蝈蝈国之间修一堵围墙。 围墙可以看成是一个长度为n的括号序列,与此同时还有一个长度为n的排列P,一个围墙被称为稳的,当且仅当: 1、这个括号序列是合法的。 2、构造一张n个点的图,当且仅当第i个位置是左括号时,点i向右Pi连边,最后形成的图必须满足每个点度数均为一。保证对于任意i有Pi 一个括号序列合法的定义如下: 1、空序列是合法的。 2、如果“原创 2017-03-25 16:40:06 · 570 阅读 · 0 评论 -
[CF671D]Roads in Yusland
题目大意一颗n个节点的树所有边都坏掉了。 请m个工人修路,每个工人都可以修一条树链ui到vi,费用为ci。 求最小修路费用,无法全部修复输出-1。DP我们来设f[i]表示i子树全都修好(包括i到父亲那条边)的最小费用。 怎么转移呢? 比如有一个能修i到其父亲边的工人j,费用是这个工人的费用+其他杂七杂八的子树的f值和。 用线段树来维护,大概是这样吧QAQ贪心我们来看看一个强做法! 首先可原创 2017-03-07 17:16:40 · 1029 阅读 · 0 评论 -
CF717E
题目大意给定一颗n个节点的树,n<=10^5 每个节点有一个颜色, 黑色或白色。 你需要输出一条从节点1开始行走的,长度不超过10^7的路径,规定每走到一个节点就会改变其颜色(注意初始站在1不会改变1的颜色),每次只能走向相邻的节点,你输出的路径需要使所有结点都变成黑色。构造一波我们用solve(x)表示从x开始走,最后回到x,任务是将以x为根的子树中除了x以外的节点都变成黑色(x的颜色可以任意原创 2016-09-12 21:47:32 · 616 阅读 · 0 评论