贪心算法
穷源溯流
路很长,尽管走便是。
展开
-
HDU 6533 Build Tree(贪心)
const int N=1e6+5; int n,m,_; int i,j,k; ll a[N]; ll sum[N];int main(){ ll d,c; ll p; while(~sd(n)){ sll(d); sll(c); sll(p); for(int i=1;i<=n;i++) sll(a[i]),a[i]=a[i]; if(d==0 || c==0){ put...原创 2021-04-17 18:17:32 · 218 阅读 · 0 评论 -
洛谷 P1712 [NOI2016] 区间(线段树+贪心+思维)
const int N=5e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; int ll,rr; bool operator<(Node o){ //if(o.r==r) return l<o.l //return r<o.r; retu...原创 2021-03-31 20:34:56 · 180 阅读 · 1 评论 -
洛谷 P1937 [USACO10MAR]Barn Allocation G(线段树+贪心)
const int N=1e5+5; int n,m; int i,j,k; int a[N]; struct Node { int l,r; void read(){ sdd(l,r); } bool operator<(Node o){ if(r==o.r) return l<o.l; return r<o.r; ...原创 2021-03-31 19:30:36 · 248 阅读 · 0 评论 -
洛谷 P2887 [USACO07NOV]Sunscreen G(贪心)
const int N=1e5+5; int n,m; int i,j,k; struct Node { int l,r; void read(){ sdd(l,r); } bool operator<(Node o){ if(r==o.r) return l<o.l; return r<o.r; } } a[N];...原创 2021-03-31 17:58:52 · 188 阅读 · 0 评论 -
洛谷 P1607 [USACO09FEB]Fair Shuttle G(贪心+信心)
const int N=1e5+5; int n,m; int i,j,k; struct Node { int l,r; int c; void read(){ sddd(l,r,c); } bool operator<(Node o){ if(r==o.r) return l<o.l; // return r<o.r; ...原创 2021-03-31 17:18:15 · 228 阅读 · 0 评论 -
CodeCraft-21 and Codeforces Round #711 (Div. 2) B. Box Fitting(枚举)
const int N=2e6+5; int n,m; int i,j,k; int a[N]; int vis[N];bool judge(){ for(int i=20;i>=0;i--) if(vis[1<<i]) return 0; return 1;}int main(){ rush(){ sdd(n,m); for(int i=1;i<=n;i++)...原创 2021-03-30 14:10:16 · 312 阅读 · 0 评论 -
Educational Codeforces Round 27 C. Two TVs(模拟)
一个人可以同时看两台电视,但是如果一台电视在 [x,y] 时间内播放,如果在 [z,w] 时间内的节目也想要在这台电视上播放必须满足 z>y,是否可以用两台电视将所有节目看完const int N=2e5+5; int n,m; int i,j,k; pii a[N];int main(){ while(~sd(n)){ forn(i,1,n) sdd(a[i].fr,a[i].sc); int flag=1;...原创 2021-03-13 09:02:58 · 177 阅读 · 0 评论 -
牛客IOI周赛23-提高组 C 星星(贪心)
题解来自:洛谷定义 d 数组:表示将星星传给第头牛,所以 ,(其中为星星总数的平均值,当然 d 数组有正负之分)但是第 1 头牛收到的,即是个未知数,方便起见令其为所以 :得到经过上述的转化,我们最后要求的是可以发现每一个中都包含一个且其余的式子很有规律变化一下形式,令可以发现所以上面三个式子变化为 :而最后的答案也转化为求:而根据贪心const int N=1e6+5; ...原创 2021-03-08 13:17:21 · 209 阅读 · 0 评论 -
Codeforces Round #674 (Div. 3) D. Non-zero Segments(前缀+思维)
给出 n 个数,如果有一段区间之和为 0,那么可以在区间内任意两个数之间插入一个数,使其不等于 0;求任意子区间之和都不为 0,最少要插入几个数之前有个题用到了这种思想:第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 小宝的幸运数组(同余定理)如果一段前缀和为 m,如果又碰到一段前缀和为 m 的前缀,那么这两个前缀之间的和为 0本题的贪心:在 R-1 与 R 之间插入一个数可以保证答案的最小const int N=2e5+5; int n,m; ...原创 2021-03-06 09:15:07 · 134 阅读 · 0 评论 -
Codeforces Round #401 (Div. 2) B. Game of Credit Cards(枚举)
A,B 两人都有 n 个数字,B 可以改变其数字的顺序,A 不可以,若 b[i]>a[i] 则 B 积一分;若a[i]>b[i],则 A 积一分;求 A 积分的最小值,B 积分的最大值分别是多少const int N=2e5+5; int n,m; int i,j,k; int a[N]; int b[N];int main(){ while(~sd(n)){ for(int i=1;i<=n;i+...原创 2021-03-05 16:43:28 · 121 阅读 · 0 评论 -
Codeforces Round #497 (Div. 1) A. Reorder the Array(贪心+思维)
给出 n 个数,求出一种排列 b[],若排列中的任意位置 b[i]>a[i] ,则贡献+1,求贡献最大是多少贪心策略 :先将较大的数取代。const int N=2e5+5; int n,m; int i,j,k; int a[N]; map<int,int> mp; int b[N];int main(){ while(~sd(n)){ for(int i=1;i<=n;i++) sd...原创 2021-03-05 15:34:28 · 142 阅读 · 0 评论 -
LightOJ 1269 Consecutive Sum(Trie+贪心)
Little Jimmy is learning how to add integers. As in decimal the digits are 0 to 9, it makes a bit hard for him to understand the summation of all pair of digits. Since addition of numbers requires the knowledge of adding digits. So, his mother gave him a s原创 2021-02-24 17:22:05 · 176 阅读 · 0 评论 -
Codeforces Round #700 (Div. 2) B. The Great Hero(贪心)
有 n 个怪物,1 个英雄,英雄的攻击和体力分别为 A 和 B,怪物的攻击分别为 a[i] 和 b[i],每次攻击一次怪物,英雄损失 a[i] 的体力,对应的怪物损失 A 点体力,问英雄是否可以将所有怪物打败注意即使 B<a[i] 但是 B>0,英雄仍然可以对怪物造成 A 点伤害显然,怪物伤害低的先被击败即可,留着一丝血量去攻击伤害高的const int N=1e6+5; int n,m,t; int i,j,k; pll a[N...原创 2021-02-08 09:23:04 · 245 阅读 · 1 评论 -
洛谷 P3963 [TJOI2013] 奖学金(贪心+思维)
题目保证 n 为奇数首先找中位数我们是一定要排序的,按照成绩排序,在区间 [n/2+1,c-n/2] 中枚举 i 作为中位数,找到当 i 作为中位数时,左边 k 个最小的奖学金,和右边 k 个最小的奖学金,判断是否满足条件,取中位数的最大值即可。找区间内的前 k 个最值,没错,主席树,但是需要注意的是,在建树时一定是奖学金作为权值,但是有可能多个人同时拥有相同数目的奖学金。这里并没有采用主席树,采用前缀和+优先队列对于 i 为中位数来说,预处理出 i 左边拥有 k 个奖学金的最...原创 2021-01-27 14:48:14 · 381 阅读 · 0 评论 -
Codeforces Round #695 (Div. 2) B. Hills And Valleys(思维+贪心+模拟)
给出 n 个数,如果 a[i]>a[i-1] && a[i]>a[i+1] 或者a[i]<a[i-1] && a[i]<a[i+1] 那么称 a[i] 为山峰或山谷,可以改变一个数,问改变一个数之后,数列中剩下的山峰山谷的个数最少有几个我们很容易想到当有 山峰-山谷-山峰的时候可以一下消去 3 个,这是最优的;其次如果单个山峰或山谷,只消去 1 个,这是最差的当 山峰-山谷 时,不可能两个山峰同时出现,好的情况可以将两个都删...原创 2021-01-18 23:39:28 · 204 阅读 · 2 评论 -
Codeforces Round #695 (Div. 2) C. Three Bags(贪心+思维)
有三个背包,三个背包里分别有 A B C 个数字,每次操作可以从任意一个背包中挑选一个数字 x,然后在另外两个背包中挑选一个数字 y 将其变为 y-x,这样操作直至三格背包中剩下一个数字为止,求最后的结果最大是多少将 A 分为 <a,A'> B分为 <b,B'>,C分为 <c,C'>,其中 a,b,c 为背包中的任意元素,A‘ 为除 a 之外的 A 中的所有元素很容易发现对某个数进行操作偶数次那么他的贡献是正的,操作奇数次贡献是负的,对...原创 2021-01-18 21:51:56 · 213 阅读 · 1 评论 -
洛谷 P2672 推销员(线段树+贪心)
假设走过了 {pi,pj,pk} 家住户,那么疲劳时最大是 max{pi,pj,pk}(最远距离)+sum{pi,pj,pk}(每户人口积累的疲劳值)所以我们只要维护区间最大值与区间和即可,但是现在有一个问题,不知道维护哪一段区间,如果下一步能够想到贪心,这个题应该可以解决了按照 A 的大小降序排序,如果 A 大 S 大,那么毫无疑问 如果 A 小 S 大,如果 S 足够的话,也会被选择 如果 A 大S 小,只有可能被 2 这种情况取代const int N=1e...原创 2020-11-30 11:51:38 · 318 阅读 · 0 评论 -
Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) C. The Delivery Dilemma(贪心+前缀和)
有 n 个快递,每个快递可以选择自己去拿,或者让快递员来送,自己去拿要花费 b[i] 的时间,快递员来送花费 a[i] 时间,问所有的快递送到家后的最短时间是多少我们可以对数组 a[] 进行一个升序排列,很容易知道如果前 i 个让快递员来送,那么快递员所花费时间为 a[i],剩下的由自己拿,那么算法复杂度只有 O(n)const int N=2e5+5; int i,j,k; int n,m,t; //ll a[N]; pair<ll...原创 2020-11-03 08:14:59 · 343 阅读 · 1 评论 -
D2. Sage‘s Birthday (hard version)(构造+贪心)
现在有 n 个数,对 a[] 重新排序,使得好数最多好数的定义:在数组中比相邻的两个数都小,则称为好数,当然数组最左边和最右边的数不能称之为好数可以保证在数组 a 中,可能会有几个数相等题目一定是要进行插空的,偶数的位置放小数,但是 n 为偶数的时候,会有一个小数在最后的位置浪费掉,先将最后一个数用最大数填上,这样剩下奇数个位置贪心策略:因为要避免相同的数,所以 a 数组先在偶数位置处从小到大放置数据,再在奇数位置处,从小到大放置数据但 Wrong 了,因为最后两个位...原创 2020-09-22 17:17:24 · 414 阅读 · 0 评论 -
D1. Sage‘s Birthday (easy version)(构造+贪心)
现在有 n 个数,对 a[] 重新排序,使得好数最多好数的定义:在数组中比相邻的两个数都小,则称为好数,当然数组最左边和最右边的数不能称之为好数const int N=1e5+5; int a[N],b[N]; int i,j,k; int n,m,t;void go(){ cout<<0<<endl; cout<<a[1]<<' '; if(a[2]) cout<<a[...原创 2020-09-22 09:09:10 · 1146 阅读 · 0 评论 -
D. A Game with Traps(贪心+二分搜索+前缀和)
有 m 个士兵通过长度为n+1的道路,可是道路上有k个陷阱。每个陷阱都有危险程度,若士兵的敏捷没达到对应危险程度,那么这个士兵不能够通过这个陷阱。有一名队长,队长可以去拆陷阱,每个陷阱在在区间 [1,n+1] 上分别为 [Li,Ri],队长拆陷阱必须去 Ri 的位置。队长血厚。问最多有多少士兵跟随队长在 t 时间内走到 n+1 点本题采用二分枚举危险度,只有敏捷度>=危险度的士兵可以过去要用最小的时间过去,那么教官必须采用最短的时间去吧相应的陷阱拆掉我们看这三个区间,如果这些...原创 2020-07-07 20:43:00 · 373 阅读 · 1 评论 -
K for the Price of One (Hard Version)(dp/贪心)
有 n件物品,每一件的价格为ai,你有m枚钱,你可以选择买一件,或者买k件并支付最大价值的那件的价格显然dp[i]是由前一件或前k件状态转移过来dp[i]=min(dp[i-1]+a[i],dp[i-k]+a[i]);dp[i]表示到第i件货物的最小花费(由于排序之后,表示前 i 件货物最小花费)#include <iostream>#include <...原创 2020-03-09 21:28:17 · 940 阅读 · 0 评论 -
B1. K for the Price of One (Easy Version)(贪心)
商店里有 n 样物品,你有 p 元钱,你可以买一个物品付a[i]元 或者 买k个物品(这个优惠政策可以一直使用),只付最贵的那个。每个物品最多买一次,求最多能买多少物品。思路:先将商品价格排序,利用贪心,求出 sum[i],及前缀和。当然价格少的,我们全部都要,这样我们定义 sum[i]=sum[i-k]+a[i] (i>=k) 表示买到第 i 件商品为止,所要的价格,这样利用滚动数组 算法复杂度 O(n)const int N=2e5+5; int n,m,...原创 2020-07-04 09:39:24 · 348 阅读 · 0 评论 -
609 C. Long Beautiful Integer(思维+大数)
C. Long Beautiful Integer有个 n 位数 x,满足 a[i]=a[i+k],求最小的 y 使得 y>=x 且 y[i]=y[i+k]const int N=2e5+5; int n,m,t; int i,j,k; int a[N];int main(){ IOS; while(sdd(n,k)==2){ for(i=1;i<=n;i++){ scanf("%1d",&..原创 2020-07-03 11:26:55 · 199 阅读 · 0 评论 -
C. As Simple as One and Two
input10onetwonetwooneooonetwoootwoonetwooooottttwottwwoooooneonnneoneeeeeoneeeeeeetwooooooutput618 11 12 1 6 21 11 13 12 16 014 011 21 11 one,删除n/e。 two,删除 t/w 。 twone,删除 o 。 避免出现two…o…onecon...原创 2020-06-28 10:31:13 · 301 阅读 · 0 评论 -
D. Walking Robot(贪心)
const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; int main(){ while(~sd(n)){ int x,y; sdd(x,y); for(i=0;i<n;i++) sd(a[i]); int ans=0,maxx=y; for(i=0;i<n;i++){ if(a[i]==0){ ...原创 2020-06-24 23:59:15 · 697 阅读 · 0 评论 -
1432:糖果传递(思维)
【题目描述】有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。【输入】第一行一个正整数n≤1000000,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.【输出】求使所有人获得均等糖果的最小代价。【输入样例】41254【输出样例】4我们将 a[i] 表示原来所拥有的糖, x[i] 表示为 i 传递的(正数表示得到,负数表示给出)我们有 a[i] ...原创 2020-06-12 17:45:27 · 1604 阅读 · 0 评论 -
1431:钓鱼
【题目描述】在一条水平路边,有n个钓鱼湖,从左到右编号为1,2,…,n。佳佳有H个小时的空余时间,他希望利用这个时间钓到更多的鱼。他从1出发,向右走,有选择的在一些湖边停留一定的时间(是5分钟的倍数)钓鱼。最后在某一个湖边结束钓鱼。佳佳从第i个湖到第i+1个湖需要走5×Ti分钟路,还测出在第i个湖停留,第一个5分钟可以钓到Fi 条鱼,以后每再钓5分钟,可以钓到的鱼量减少Di,若减少后的鱼量小于0,则减少后的鱼量为0。为了简化问题,佳佳假定没有...原创 2020-06-12 17:11:41 · 893 阅读 · 0 评论 -
A. Shovels and Swords
Polycarp plays a well-known computer game (we won't mention its name). In this game, he can craft tools of two types — shovels and swords. To craft a shovel, Polycarp spends two sticks and one diamond; to craft a sword, Polycarp spends two diamonds and one原创 2020-06-12 16:28:41 · 268 阅读 · 0 评论 -
1430:家庭作业
【题目描述】老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业学分为10,要求在6天内交,那么要想拿到这10学分,就必须在第6天结束前交。每个作业的完成时间都是只有一天。例如,假设有7次作业的学分和完成时间如下:作业号 1 2 3 4 5 6 7 期限 1 1 3 3 2 2 6 学分 6 7 2原创 2020-06-11 16:17:54 · 876 阅读 · 0 评论 -
1426:智力大冲浪
【题目描述】小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元。先不要太高兴!因为这些钱还不一定都是你的。接下来主持人宣布了比赛规则: 首先,比赛时间分为n个时段(n≤500),它又给出了很多小游戏,每个小游戏都必须在规定期限ti前完成(1≤ti≤n)。如果一个游戏没能在规定期限前完成,则要从奖励费m元中扣去一部分钱wi,wi为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参赛者都能在一个时段内完成,而且都必须从原创 2020-06-11 16:07:02 · 725 阅读 · 0 评论 -
1429:线段
【题目描述】在一个数轴上有nn条线段,现选取其中kk条线段使得这kk条线段两两没有重合部分,问最大的kk为多少?【输入】第一行为一个正整数nn,下面n行每行22个数字ai,biai,bi,描述每条线段。【输出】输出文件仅包括1个整数,为kk的最大值。【输入样例】30 22 41 3【输出样例】2【提示】【数据规模】对于20%的数据,n≤10n≤10。对于50%的数据,n≤1000n≤1000。对于70%的数据,n≤100000n≤10原创 2020-06-10 15:16:39 · 768 阅读 · 0 评论 -
1428:数列分段
【题目描述】对于给定的一个长度为NN的正整数数列A[i]A[i],现要将其分成连续的若干段,并且每段和不超过MM(可以等于MM),问最少能将其分成多少段使得满足要求。【输入】第1行包含两个正整数N,MN,M,表示了数列A[i]A[i]的长度与每段和的最大值;第2行包含NN个空格隔开的非负整数A[i]A[i],如题目所述。【输出】一个正整数,输出最少划分的段数。【输入样例】5 6 4 2 4 5 1【输出样例】3【提示】【数据范围】对于20%的原创 2020-06-10 15:03:59 · 584 阅读 · 0 评论 -
1427:数列极差
【题目描述】在黑板上写了NN个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数aa和bb,然后在数列中加入一个数a×b+1a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的maxmax,最小的为minmin,则该数列的极差定义为M=max−minM=max−min。【输入】第一行,一个数为NN;第二行,NN个数。【输出】输出极差。【输入样例】31 2 3【输出样例】2假设有三个数a,b,c,且满足 a.原创 2020-06-10 14:54:40 · 1927 阅读 · 0 评论 -
1425:加工生产调度
【题目描述】某工厂收到了nn个产品的订单,这nn个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。某个产品ii在 A,B 两车间加工的时间分别为Ai,BiAi,Bi。怎样安排这nn个产品的加工顺序,才能使总的加工时间最短。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A,B 两车间加工完毕的时间。【输入】第一行仅—个数据nn,表示产品的数量;接下来nn个数据是表示这nn个产品在 A 车间加工...原创 2020-06-10 14:33:54 · 1240 阅读 · 0 评论 -
1424:喷水装置
【题目描述】长LL米,宽WW米的草坪里装有nn个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W2W2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?【输入】输入包含若干组测试数据。第一行一个整数TT表示数据组数;每组数据的第一行是整数nn、LL和WW;接下来的nn行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况...原创 2020-06-10 14:11:41 · 597 阅读 · 0 评论 -
1423:种树
【题目描述】现在我们国家开展新农村建设,农村的住房建设纳入了统一规划,统一建设,政府要求每一住户门口种些树。门口路边的地区被分割成块,并被编号成1..N。每个部分为一个单位尺寸大小并最多可种一棵树。每个居民房子门前被指定了三个号码B,E,T。这三个数表示该居民想在B和E之间最少种T棵树。当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l。居民们想种树的各自区域可以交叉。你的任务是求出能满足所有要求的最少的树的数量,尽量较少政府的支出。【输入】第一行包含数据N,M,区域原创 2020-06-09 20:06:33 · 292 阅读 · 0 评论 -
1422:活动安排
【题目描述】设有nn个活动的集合E={1,2,…,n}E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动ii都有一个要求使用该资源的起始时间sisi和一个结束时间fifi,且si<fisi<fi。如果选择了活动ii,则它在半开时间区间[si,fi)[si,fi)内占用资源。若区间[si,fi)[si,fi)与区间[sj,fj)[sj,fj)不相交,则称活动ii与活动jj是相容的。也就是说,当si≥fjsi≥fj或sj...原创 2020-06-09 19:29:56 · 425 阅读 · 0 评论 -
Jzzhu and Chocolate
Jzzhu has a big rectangular chocolate bar that consists ofn × munit squares. He wants to cut this bar exactlyktimes. Each cut must meet the following requirements:each cut should be straight (horizontal or vertical); each cut should go along edges o...原创 2020-06-02 22:57:35 · 185 阅读 · 0 评论 -
C.Books Queries(思维+寻找元素位置)
You have got a shelf and want to put some books on it.You are givenqqqueries of three types:Lidid— put a book having indexididon the shelf to the left from the leftmost existing book; Ridid— put a book having indexididon the shelf to the rig...原创 2020-05-29 23:00:04 · 341 阅读 · 1 评论