贪心
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
EC_FINAL E.flow 贪心 好模型
LINK题意:给你一张图,这个图保证1到n的路径长度相同并且不相交,每条边会有个流量,每次操作可以使得一条的流量-1,一条边的流量+1,问最少操作多少次可以满足最大流量思路:这个图大概长成这样。考场上并没有发现很好的性质,只发现了每条路径的容量取决于min(∑c)min(\sum c)min(∑c),然后想着该怎么把大的容量转移给小的,然后。。就做不出来了。后来看了正解,正解是把每条路径按照容量排序,由于我们可以先知道答案的流量,然而如果要流ansansans的流量,那么一定要满足每条边都要满足原创 2021-10-07 18:46:17 · 194 阅读 · 0 评论 -
贪心 田忌赛马
link题意:有不同的马,两个序列,a和b,可以重新安排a,如果ai>bi 赚200,ai=bi 不赚钱 ai<bi 亏损200问最多能赚多少钱。思路:考虑贪心,把a和b都排序,维护四个指针,如果a的最大数比b的最大数大,那么直接赚,如果<=,比较a和b的最小数,如果还是比不过,之间换掉b的最大值,反正都会输。// Problem: Tian Ji -- The Horse Racing// Contest: Virtual Judge - HDU// URL: https:原创 2021-09-10 11:48:36 · 235 阅读 · 2 评论 -
CF1136D Nastya Is Buying Lunch 贪心
link题意:给定n个人,m条边,对于一条u,v的边,如果u在v的位置的前面,那么可以交换u和v,最后问pos n 的这个人能往前换多少位置。思路:考虑从pos大的位置从前往后考虑,对于当前这个位置,如果不换肯定不是更优的,假设当前位置是x,对于x-1的数,在后面的序列,假设原来能访问后面的序列,但是不能访问x,那么不换就访问不了了。所以可以动态维护位置,维护位置的方式也很简单,对于他们的位置,交换一次更新一次。代码:// Problem: D. Nastya Is Buying Lunch/原创 2021-09-07 10:17:31 · 262 阅读 · 0 评论 -
D. Expression Evaluation Error(贪心,数学规律)
link题意:求n个数,这n个数和10进制为s,求他们11进制的最大值。思路:考虑先能不能无花费拆分,这里的无花费指的是两个数在11进制相加还是原数,例如2030,2和3都是可以拆的,拆成1030和1000,然后如果数列中还不满足的话,那么这些数都是满足100…这种形式的。由于花费要小,我们可以贪心的选择最小的数,并且拆掉一个次高位。例如1000拆成900和100,如果拆成1和999,和比前面那种拆法小,不优。代码:// Problem: D. Expression Evaluation Err原创 2021-09-06 15:01:50 · 584 阅读 · 2 评论 -
Sweet Game
题意:有点绕,简单来说就是每次选一个位置a[i],i+1~n在之前要选完或者一点都没选,价值会随时间改变d[i],问最大价值是啥。思路:挺妙的。考虑倒着枚举n,那么考虑假设枚举到了x,我们对于当前的序列,我们只能插入到队首或者队尾,那么我们只需要考虑队首的贡献和队尾的贡献哪个最大就可以了。std:// Problem: Sweet Game// Contest: NowCoder// URL: https://ac.nowcoder.com/acm/contest/11235/D// Me.原创 2021-08-28 23:01:25 · 339 阅读 · 0 评论 -
Trees of Tranquillity
链接题意:思路:这题考察了dfs序的问题,第二棵树要满足在不同子树,也就是dfs序他们不能相交。第一棵树很容易想到只能是一条链上的某些节点,那么我们先按照dfs序建出第二棵树,然后贪心的用set来维护第一棵树,set是来维护该节点在第二棵树上的L,R区间,我们每次贪心的来维护,如果上面的点覆盖了当前的区间,那肯定是区间小的更优秀。代码://#pragma GCC target("avx")//#pragma GCC optimize(2)//#pragma GCC optimize(3)/原创 2021-08-08 11:48:51 · 272 阅读 · 0 评论 -
Knowledge Test about Match 贪心乱搞 匹配
链接题意:a数组是0~n-1,让b数组和a来匹配,任意两个数的代价是sqrt(|a[j]-b[j]|),求加起来的最小值思路:由于sqrt函数的性质,不能无脑sort,由于n加起来40000,每组最多1000,算下来最多4e7左右吧,然后b的值都在0~n-1里面,那就启发我们,每组里面n^2,可以先枚举差值d然后暴力匹配。代码:#include<iostream>using namespace std;const int N = 10010;int a[N];bool st原创 2021-07-19 22:03:45 · 326 阅读 · 0 评论 -
E. Gold Transfer 树上倍增,动态加点
链接题意:思路:思考简单的贪心,肯定是距离根节点越近的点越先考虑,我们可以logn暴跳到离根最近的点的位置,然后修改,由于操作影响后面,也就是我们算法的贫瘠是nlogn,每次暴力倍增从v开始更新一下a数组就行了。fflush能做到缓冲std的效果。#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N=400010;int f[N][20]原创 2021-07-03 01:02:55 · 204 阅读 · 0 评论 -
D. Deleting Divisors(博弈,思维)
链接题意 :简要来说就是双方玩游戏,假设当前数为n,那么每次可以减去除了1和本身的因数,最后不能操作的话就输了。思路:也是个类似于sg函数打表找规律题,由于必胜态不可能是偶数,那么我们肯定尽量要让对方变成奇数,怎么操作呢?如果当前数是奇数,那么我方肯定输,当前数是偶数的话,如果含有除了2的质因子也是必赢,因为每次我们可以减奇数,让对方变成奇数,如果全含2的话,可以发现,如果当前数是2^i次,我们只能操作减去2的i-1次,因为减去其他,让对方变为偶数肯定是不行的,只要判断2的次幂是奇偶就行啦。代码:原创 2021-06-21 19:56:10 · 252 阅读 · 0 评论 -
Erase and Extend (Hard Version) 贪心
链接查看题意:你可以进行以下的无限次操作,操作1:s=s+s,操作2 删去s的最后一个字符,最后问长度为k的字符的最小字典序。思路:考虑贪心做法,我们贪心的维护前缀,如果当前遍历的值比循环节对应的位置大直接break ,如果小于,那么显然肯定是要选择的,然后把指针弄成1,如果刚好等于,我们就把指针+1。例如 “dbdadb”从第二个开始指针为0,到第三个指针进1,到第四个a比b小指针又指向第0个位置,到最后指针到了2这个位置。最后输出答案的串一定要让k变为0,也就是从最后pop掉k个数,因为没原创 2021-06-21 19:50:44 · 188 阅读 · 0 评论 -
E - New Game Plus! 堆贪心 思维
提交 1000祭题意:思路:一开始想的就是按照值的大到小排序,然后不知道负数的时候怎么处理了,看了题解原来可以用堆,由于可以清k次零,也是就是把序列分割成k+1组,我们可以发现在每一组里面值是非递增的,否则可以交换两个元素,然后可以用堆维护每个组当前的值,每次取最大,然后把最大的值赋给当前最大的值。复杂度O(NlogN)代码:// Problem: CF1415E New Game Plus!// Contest: Luogu// URL: https://www.luogu.com.cn.原创 2021-06-01 19:15:03 · 203 阅读 · 0 评论 -
E. String Reversal
题意:给定一个字符串,你每次可以交换相邻位置的字母,问最少操作多少次才能达到他的反转串思路:先把反转串获得,“abcbd"的反转串"dbcba”,然后我们从反转串的最前面开始遍历,由于贪心,我们尽量把在原串中最近出现该字母的位置放到位置上,第一步模拟出来就是"dabcb",对于d后面这些位置也就是消除了影响,模拟下来每一次放到前面的贡献就是现在还在序列中并且在这个位置前并且未被操作的字母的个数,那么用个树状数组维护一下就行了,复杂度O(nlogn)。代码:// Problem: E. String原创 2021-05-30 19:37:58 · 254 阅读 · 0 评论 -
F - Three Paths on a Tree
link题意:求树上三个点之间的最长距离,每条边被覆盖了只算一次贡献。思路:求树的直径,然后再找一个点到树直径上节点距离最大。代码:#include<bits/stdc++.h>using namespace std;const int N=200010;vector<int>v[N]; int n;int mxdep;int resa,resb;vector<int>seq;bool flag=0;set<int>s;void原创 2021-04-17 15:41:45 · 240 阅读 · 0 评论 -
G - Candy Box (hard version)
思路:用堆贪心,按照总数量为第一关键字,按照f为1的个数为第二关键字,大的在前面,贪心的取,每次更新堆就可以了,push进堆的时候尽量去掉为0的个数#include<bits/stdc++.h>using namespace std;//#define int long longint mp[2][200010];int a[200010];set<int>s;struct node{ int xx; node(int _X) { xx=_X; } b.原创 2021-04-17 15:28:21 · 270 阅读 · 0 评论 -
F - Topforces Strikes Back 贪心+数学+思维
link题意:给你n个数,让你挑出来至多三个互不为倍数的数。思路:总共有三种情况,第一种一个数,取最大值第二种,两个数,可以证明a[n]一定在答案之中,假设x,y为最后的解,如果x或者y不是a[n]的因数,那么可以替换另一个,答案更优,否则x+y<=a[n]/2+a[n]/3,用a[n]替换更优第三种,三个数,三个数有一种情况需要特判,a[n]/2+a[n]/3+a[n]/5,别的按照第二种情况贪心挑选就可以了。代码:#include<bits/stdc++.h>usin原创 2021-04-17 15:26:03 · 165 阅读 · 0 评论 -
D - GCD and MST
link思路:暴力加剪枝。我们可以发现,答案肯定<=(n-1)*p,所以对于gcd大于等于p的区间我们可以不用考虑他带来的贡献,根据克鲁斯卡尔贪心的原则,我们可以按照点权来排序,从小到大枚举,然后嗯往左和右拓展,直到不能拓展或者找到在相同集合的数为止或者区间gcd不是当前数为止。为啥能在相同集合的时候break呢?假设当前左右区间是[i,j],i和j属于同一个集合,由于在相同集合,肯定会有更小的gcd连接他俩,对于左区间,能满足当前的gcd,肯定也能满足更小的_gcd,所以再往下拓展是没有必要的.原创 2021-04-13 11:23:55 · 198 阅读 · 0 评论 -
Water Level CodeForces - 1461E
链接题意:一开始有k个水量 , 题目要求你在t天保持l~r的水量,每天固定消耗x水量,一天的刚开始你可以选择加y水量或者不加 ,问t天内是否一直能维持。思路:分类讨论, 这题突破点在于x,因为x的范围是最小的,在1e6。小trick,把k和r分别减去l,那么可以减去一边讨论,直接看是否小于0就行了,如果x=y,那么如果第一天能不小于0的话就可以一直苟,如果x>y,那么我们每一天必定加每天固定减少x-y,看看能撑到几天,如果x<y,那么我们直接快没的时候加,也就是在[0~x-1]的范围内加,原创 2020-12-14 09:10:56 · 291 阅读 · 2 评论 -
codeforces1453 E. Dog Snacks
题目链接题意 : 给你一棵树,每个点有一个零食 ,某个人从1号根节点出发,每次尽量走最近的点,最后走完回到1号点,问最小的k。思路:本来想的是二分+check 发现不可做啊,然后看了别人的题解,原来是有规律的,这道题确实和ccpc秦皇岛的蛮像,也是用的树形dp和贪心的结合,假设我们以u为根(u不是根节点的情况),那么对于每个儿子v所要满足k>=f[v]+2k>=f[v]+2k>=f[v]+2 其中k是能走的最大的范围 f[v]是子节点最浅的位置,由于这个题的特殊性,每次遍历完子树,原创 2020-12-06 21:59:58 · 435 阅读 · 0 评论 -
E - Transformable Teacher
题意:从1~m中选一个数插入到a中,然后把这n+1个数,分成(n+1)/2组,每一组权值和最小。思路:先将a数组排个序,然后枚举要放的数,二分找到大于等于b的位置,如果该位置是奇数就选择该位置,如果是偶数,–pos,然后加上这个点的权值差加上不算该点的前缀和 加 后缀和。更新一下答案就可以了。简单的贪心都做不出,凭什么拿铜牌啊。。代码:#include<bits/stdc++.h>using namespace std;const int N=200010;#define int .原创 2020-11-05 12:35:19 · 294 阅读 · 0 评论 -
tokitsukaze and Soldier
题意:选择k个士兵,在满足总共的mins>=k的情况下,让他们的值和最大思路:是真的菜,这么简单的贪心都想不到,假设我们已经知道了最后选取k个士兵,那么我们可以优先选择s>=k最大的k个士兵,然后我们将士兵们排序嘛,然后按照值放进堆中,如果堆的大小大于限制,把最垃圾的t出来!ac代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100010;struct n.原创 2020-10-21 20:51:56 · 191 阅读 · 0 评论 -
E. Carrots for Rabbits(贪心)
题意:有n个萝卜 ,每根萝卜长度不一样,现在将这些萝卜分为k段 这k根萝卜每根萝卜的花费是长度的平方,求最小的花费。思路:原本想的是放进将萝卜放进大根堆,然后取最大的对半分,其实这样是不正确的,hack数据:3 510 3 1如果按照对半分的思路来 就是分为 2 3 5 3 1 ,然而最优解是 3 3 4 3 1,那就是不正确的,那么我们换一种思路,如果知道每一根萝卜分为z段 ,那么每根萝卜的最优解就是均分,那么有个大胆的想法就是将每个萝卜的当前最小花费和多分一段的最小花费的差值放进大根堆里.原创 2020-10-20 14:18:54 · 537 阅读 · 0 评论 -
D. Hexagons
题目链接:http://codeforces.com/contest/1421/problem/DD. Hexagonstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputLindsey Buckingham told Stevie Nicks “Go your own way”. Nicks is now sad and wants to go原创 2020-10-20 13:29:13 · 296 阅读 · 0 评论 -
B. Chess Cheater
题意:给定含有WL的序列,最多能将k的L变成W,问最大的分值,当有连续的W的时候后面的W加二,第一个W加1。解题思路:一开始想的是dp,dp复杂度过不去啊。。后来想着把所有夹在两个W之间得区间都排序,就没继续往下面想了,看了题解,发现贪心策略跟我差不多,策略:尽量往贴近W的位置修改L,因为这样对答案的贡献都是+2,在这个基础上如果往两个W之间填满了W答案会多增加1,那么我们要让1加的尽量多,我们把所有两个W之间的区间从大到小排序就行了,感言:还是太年轻啊。。。AC代码:#include<io.原创 2020-10-15 17:02:52 · 468 阅读 · 0 评论 -
P4053 [JSOI2007]建筑抢修
题意:问能选取最大多少个数的建筑, 满足在规定时间内,每个建筑的建立都不能超过截止时间。解题思路:先按照截止日期排序,如果能在截止日期内完成,那么我们就尽量往里扔,如果不能完成,那么我们选择大根堆中最大的看看它是不是比当前任务耗时大,如果耗时大,那么我们一定能把它抛下,并且完成任务,并且总耗时最少。代码:#include<iostream>#include<algorithm>#include<cstring>#include<queue>#i.原创 2020-09-07 19:11:36 · 243 阅读 · 0 评论 -
贪心cf d
解析:这个题的贪心听大佬说还是很明显的,最后的答案就是所有边经过的次数边权,当m比n-1大的时候意味着多出来了m-n+1个乘积,因为贪心我们当然选取大点乘在一起比较好,直接乘到n-1这个数上面,那么每条边走过的次数该怎么算呢,size[u](n-size[u]),假设是u,v这条边,那么v的子树中的任意一点和v子树的补图的任意一点之间都经过这条边,次数刚好是这个,最后经过的边的次数排序就完事了。#include<iostream>#include<cstring>#inclu.原创 2020-08-25 21:37:14 · 272 阅读 · 0 评论 -
贪心 HDU2069 Coin Change
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every teacher gives him a deadline of handing in the homework. If Ignatius hands in the homework after t...原创 2020-04-15 14:42:38 · 271 阅读 · 0 评论 -
发橙子,贪心
每年的 1024 程序员节日,黑马程序员都会举办大型的庆祝活动。今年的程序员节也不例外,每个班级的同学都发了橙子。班级里有 nn 名同学从前到后排成一排,且已经得知了这些同学的成绩,其中第 ii 名同学的成绩是 a_iai 。班主任想根据同学们上个阶段的考试成绩来评定发橙子的数量。为了激励成绩优秀同学,发橙子时需要满足如下要求:相邻同学中成绩好的同学的橙子必须更多。若相邻的同学成绩一样...原创 2020-04-12 21:41:14 · 361 阅读 · 0 评论 -
区间 贪心
如今我们位于沿海地区,需要安装大炮,使得火力可以覆盖整个区域。海岸线可以视为是无限长的直线。陆地位于海岸线的一侧,海洋位于另一侧。海洋里有若干个岛屿,每个小岛可以视为海洋中的一个点。我们需要在海岸线上安装大炮,每个大炮智能覆盖距离d,因此海洋中的小岛被大炮安装所覆盖的条件是两者间的距离不超过 d 。 我们将海岸线视为 x 轴。海洋的一侧位于 x 轴上方,陆地的一侧位于下方。给定海洋中每个小岛的位...原创 2020-03-27 22:36:27 · 398 阅读 · 0 评论 -
LIS 导弹系统 ,贪心
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统...原创 2020-03-25 17:58:39 · 219 阅读 · 0 评论 -
qdu 蓝桥训练 排队打水
题目描述有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2…………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?数据规模和约定其中80%的数据保证n< =10输入第一行n,r (n< =500,r< =75)第二行为n个人打水所用的时间Ti (Ti< =100);输出最少的花费时间样例输入3 21 2 ...原创 2020-03-18 22:49:08 · 293 阅读 · 0 评论 -
雷达,贪心
假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。每个小岛都位于海洋一侧的某个点上。雷达装置均位于海岸线上,且雷达的监测范围为d,当小岛与某雷达的距离不超过d时,该小岛可以被雷达覆盖。我们使用笛卡尔坐标系,定义海岸线为x轴,海的一侧在x轴上方,陆地一侧在x轴下方。现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。输入格式...原创 2020-02-29 12:07:53 · 388 阅读 · 0 评论 -
乘积最大,双指针+贪心
给定 N 个整数 A1,A2,…AN。请你从中选出 K个数,使其乘积最大。请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009的余数。注意,如果 X<0, 我们定义 X 除以 1000000009 的余数是负(−X)除以 1000000009 的余数,即:0−((0−x)%1000000009)输入格式第一行包含两个整数 N和 K。以...原创 2020-02-29 11:55:05 · 378 阅读 · 0 评论 -
糖果传递 贪心,数学
有n个小朋友坐成一圈,每人有a[i]个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。求使所有人获得均等糖果的最小代价。输入格式第一行输入一个正整数n,表示小朋友的个数。接下来n行,每行一个整数a[i],表示第i个小朋友初始得到的糖果的颗数。输出格式输出一个整数,表示最小代价。数据范围1≤n≤1000000数据保证一定有解。输入样例:41254输...原创 2020-02-28 22:16:49 · 240 阅读 · 0 评论 -
贪心 最长子序列二
题目#include<iostream>using namespace std;const int N=100010;int a[N],q[N];int main(){ int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int len=0; for(...原创 2020-02-22 14:54:41 · 210 阅读 · 1 评论 -
锯木头(贪心)
题目来源:点这里题目大致意思就是切木头要付出代价,求最小代价。(贪心)这里考到了二叉数的知识,要领:最小的数和次小的数是兄弟节点。AC代码:#include<stdio.h>#include<algorithm>using namespace std;typedef long long ll; ll l[200005];int main(){ int ...原创 2020-01-31 16:00:51 · 811 阅读 · 0 评论