
贪心算法
穷源溯流
路很长,尽管走便是。
-
原创 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 s2021-02-24 17:22:0510
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:0457
1
-
原创 洛谷 P3963 [TJOI2013] 奖学金(贪心+思维)
题目保证 n 为奇数首先找中位数我们是一定要排序的,按照成绩排序,在区间 [n/2+1,c-n/2] 中枚举 i 作为中位数,找到当 i 作为中位数时,左边 k 个最小的奖学金,和右边 k 个最小的奖学金,判断是否满足条件,取中位数的最大值即可。找区间内的前 k 个最值,没错,主席树,但是需要注意的是,在建树时一定是奖学金作为权值,但是有可能多个人同时拥有相同数目的奖学金。这里并没有采用主席树,采用前缀和+优先队列对于 i 为中位数来说,预处理出 i 左边拥有 k 个奖学金的最...2021-01-27 14:48:1421
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:2834
0
-
原创 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:5645
0
-
原创 洛谷 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:3884
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:59123
1
-
原创 D2. Sage‘s Birthday (hard version)(构造+贪心)
现在有 n 个数,对 a[] 重新排序,使得好数最多好数的定义:在数组中比相邻的两个数都小,则称为好数,当然数组最左边和最右边的数不能称之为好数可以保证在数组 a 中,可能会有几个数相等题目一定是要进行插空的,偶数的位置放小数,但是 n 为偶数的时候,会有一个小数在最后的位置浪费掉,先将最后一个数用最大数填上,这样剩下奇数个位置贪心策略:因为要避免相同的数,所以 a 数组先在偶数位置处从小到大放置数据,再在奇数位置处,从小到大放置数据但 Wrong 了,因为最后两个位...2020-09-22 17:17:24115
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:10745
0
-
原创 D. A Game with Traps(贪心+二分搜索+前缀和)
有 m 个士兵通过长度为n+1的道路,可是道路上有k个陷阱。每个陷阱都有危险程度,若士兵的敏捷没达到对应危险程度,那么这个士兵不能够通过这个陷阱。有一名队长,队长可以去拆陷阱,每个陷阱在在区间 [1,n+1] 上分别为 [Li,Ri],队长拆陷阱必须去 Ri 的位置。队长血厚。问最多有多少士兵跟随队长在 t 时间内走到 n+1 点本题采用二分枚举危险度,只有敏捷度>=危险度的士兵可以过去要用最小的时间过去,那么教官必须采用最短的时间去吧相应的陷阱拆掉我们看这三个区间,如果这些...2020-07-07 20:43:0094
0
-
原创 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:1799
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:2488
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:5553
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:1383
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:15496
0
-
原创 1432:糖果传递(思维)
【题目描述】有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。【输入】第一行一个正整数n≤1000000,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.【输出】求使所有人获得均等糖果的最小代价。【输入样例】41254【输出样例】4我们将 a[i] 表示原来所拥有的糖, x[i] 表示为 i 传递的(正数表示得到,负数表示给出)我们有 a[i] ...2020-06-12 17:45:27152
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:41149
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 one2020-06-12 16:28:4194
0
-
原创 1430:家庭作业
【题目描述】老师在开学第一天就把所有作业都布置了,每个作业如果在规定的时间内交上来的话才有学分。每个作业的截止日期和学分可能是不同的。例如如果一个作业学分为10,要求在6天内交,那么要想拿到这10学分,就必须在第6天结束前交。每个作业的完成时间都是只有一天。例如,假设有7次作业的学分和完成时间如下:作业号 1 2 3 4 5 6 7 期限 1 1 3 3 2 2 6 学分 6 7 22020-06-11 16:17:54104
0
-
原创 1426:智力大冲浪
【题目描述】小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元。先不要太高兴!因为这些钱还不一定都是你的。接下来主持人宣布了比赛规则: 首先,比赛时间分为n个时段(n≤500),它又给出了很多小游戏,每个小游戏都必须在规定期限ti前完成(1≤ti≤n)。如果一个游戏没能在规定期限前完成,则要从奖励费m元中扣去一部分钱wi,wi为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参赛者都能在一个时段内完成,而且都必须从2020-06-11 16:07:0266
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≤102020-06-10 15:16:39142
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:5958
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:40147
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:5497
0
-
原创 1424:喷水装置
【题目描述】长LL米,宽WW米的草坪里装有nn个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W2W2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?【输入】输入包含若干组测试数据。第一行一个整数TT表示数据组数;每组数据的第一行是整数nn、LL和WW;接下来的nn行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况...2020-06-10 14:11:4197
0
-
原创 1423:种树
【题目描述】现在我们国家开展新农村建设,农村的住房建设纳入了统一规划,统一建设,政府要求每一住户门口种些树。门口路边的地区被分割成块,并被编号成1..N。每个部分为一个单位尺寸大小并最多可种一棵树。每个居民房子门前被指定了三个号码B,E,T。这三个数表示该居民想在B和E之间最少种T棵树。当然,B≤E,居民必须记住在指定区不能种多于区域地块数的树,所以T≤E-B+l。居民们想种树的各自区域可以交叉。你的任务是求出能满足所有要求的最少的树的数量,尽量较少政府的支出。【输入】第一行包含数据N,M,区域2020-06-09 20:06:3350
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:5682
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:3552
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:0477
0
-
原创 Block Towers (思维)
Students in a class are making towers of blocks. Each student makes a (non-zero) tower by stacking pieces lengthwise on top of each other. n of the students use pieces made of two blocks and m of the students use pieces made of three blocks.The students2020-05-28 23:46:28108
0
-
原创 Codeforces Round #638 (Div. 2)
A. Phoenix and Balance题目链接:https://codeforces.ml/contest/1348/problem/A #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #...2020-05-03 00:11:08126
0
-
原创 特殊密码锁
两行,给出两个由0、1组成的等长字符串,表示当前/目标密码锁状态,其中0代表凹,1代表凸。输出至少需要进行的按按钮操作次数,如果无法实现转变,则输出impossible。样例输入011000样例输出1#include <iostream>#include <cstdio>#include <vector>#incl...2020-03-16 15:54:01130
0
-
原创 Integer Intervals
描述An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b.Write a program that: finds the minimal number of elements in a set containing at l...2020-03-15 07:29:2146
0
-
原创 拼点游戏
描述C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获得三颗巧克力,小者获得一颗巧克力,如果点数相同,每人各得二颗巧克力,使用过的卡牌不得重复使用。已知C和S取到的卡牌点数,请编程计算S最多和最少能得到多少颗巧克力。输入输入包含多组测试数据。...2020-03-08 19:09:04287
0
-
原创 1227:Ride to Office
【题目描述】起点与终点相隔4500米。现Charley需要从起点骑车到终点。但是,他有个习惯,沿途需要有人陪伴,即以相同的速度,与另外一个人一起骑。而当他遇到以更快的速度骑车的人时,他会以相应的速度跟上这个更快的人。先给定所有与Charley同路的人各自的速度与出发时间,问Charley以这种方式跟人,骑完4500米需要多少时间。得出的结果若是小数,则向上取整。【输入】输入若干组数据,...2020-02-14 12:18:15119
0
-
原创 1226:装箱问题
【题目描述】一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1×1,2×2,3×3,4×4,5×5,6×6。这些产品通常使用一个6×6×h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。【输入】输...2020-02-14 11:36:03203
0
-
原创 1324:整数区间
【题目描述】请编程完成以下任务:1.从文件中读取闭区间的个数及它们的描述;2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。【输入】首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。【输出】第一行集合元素的个数...2020-02-14 09:55:1586
0
-
原创 1233:接水问题
【题目描述】学校里有一个水房,水房里一共装有m个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1。现在有n名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n编号,i号同学的接水量为wi。接水开始时,1到m号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学j完成其接水量要求wj后,下一名排队等候接水的同学k马上接替j同学的位置开始接水。这个换人的过...2020-02-14 09:20:58220
0
-
原创 1232:Crossing River
【题目描述】几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间。【输入】输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间。【输出】输出t行数据,每行1个数,表示每组过河最少时间。【输入样例】141 2 5 10【输出样例】17// Created on 2020/2/13/*#includ...2020-02-13 18:54:12101
0
-
原创 1231:最小新整数
【题目描述】给定一个十进制正整数n(0<n<1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0<k<m),求生成的新整数最小为多少?例如: n=9128456,k=2,则生成的新整数最小为12456。【输入】第一行t, 表示有t组数据;接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n,k。【...2020-02-13 18:07:39118
0