贪心
文章平均质量分 53
一些贪心的题
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
acwing 125 耍杂技的牛
题面题解每头牛的危险值 = 前面牛的重量值(w)之和 - 自身的强壮值(s) , 显然危险值和w,s都有关系,这里先给出结论 :就是将每头牛的 w+s 按升序排列,得出的 危险值最大的最小我们交换 第 i 头牛和 i+1 头牛,其他牛的危险值是不会变的,将上述式子进行化简由于s, w都是正数,wi−si+1>−si+1 , wi+1−si>−si ;比较 wi−si+1 , wi+1−si 即可当 wi+si>=wi+1+si+1 时 说明 i原创 2021-03-31 16:28:46 · 115 阅读 · 0 评论 -
西南科技大学2021届新生赛 J 苏幕遮--寻姻缘 (贪心)
题面题解经典贪心问题:我们按照区间的左端点排序,然后扫描一遍区间,维护区间的右端点的值val。如果当前区间的左端点大于了val,说明这两个区间就有重合的部分,然后记录一下信息,更新输出信息。代码#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int t, n;struct Node { int l, r, id; bool operator<(const Nod原创 2021-03-20 20:00:24 · 139 阅读 · 0 评论 -
牛客IOI周赛23-提高组 星星 (环形均分纸牌问题)
题面题解环形均分纸牌问题:详细的点这里,主要思想:我们看作是单向传递,可以由公式推导出 c[i] = s[i - 1] - (i - 1) * avg;数组c就是仓库选址的c,中位数就是最优解代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;原创 2021-03-10 11:29:38 · 146 阅读 · 0 评论 -
算法竞赛进阶指南---0x05(排序)七夕祭
题面题解代码在这里插入代码片原创 2021-03-10 11:12:05 · 2396 阅读 · 5 评论 -
codeforces 1486 B Eastern Exhibition (贪心二维仓库选址)
题面题意二维平面上有 n个点,要找一个点,使得所有点到它的曼哈顿距离( x 和 y 的坐标差距之和)之和最小。请问有几个满足该要求的点?题解经典贪心仓库选址问题,不懂点这里,仓库的最优位置就是数组的中位数此题是要在二维的坐标轴上选择最优位置,问最优位置的个数3.首先,对于二维哈曼顿距离,横纵仓库的最优选择是独立的,那么我们就可以转换成一维的最优解法,然后cntx * cnty 就是仓库的总数 (横纵坐标的个数相乘)那么对于一维的,如果n是奇数,那么最优仓库横纵方向原创 2021-03-09 21:46:15 · 387 阅读 · 0 评论 -
算法竞赛进阶指南---0x05(排序)仓库选址
题面题解仓库选址:贪心经典问题,选取中位数即为仓库的最优位置如图,我们可以推出公式,然后变形,为了使 d 最小,那么让>=变成等于就是最优解,我们发现,对于(|x1-x|+|xn-x|),只有x在x1—xn中间(图中2的位置)就变成了xn-x1,也就是最优解。在看第二个式子,(|x2-x|+|xn-1-x|),最优位置也是在x2—xn-1中间,我们发现这两个最优位置并不冲突,那么对于所有的式子都满足,那么我们发现这个中间位置就是所有仓库的中间,也就是仓库位置的中位数。代码#inc原创 2021-03-09 21:16:03 · 572 阅读 · 0 评论 -
算法竞赛进阶指南---0x17(二叉堆)超市
题面输入样例4 50 2 10 1 20 2 30 17 20 1 2 1 10 3 100 2 8 25 20 50 10输出样例80185题解我们可以用一个小根堆来维护一个利润最大的集合,将所有产品按保质期从小到大排序,每次加入商品,判断集合中的商品是否满足在保质期能否卖出,不满足就从堆顶删除一个元素(堆顶就是利润最小的元素)这样每次在极限的情况下删除最小的利润,在不过期的情况下集合中所保证的就是利润最大代码#include<原创 2021-02-10 17:22:39 · 202 阅读 · 0 评论 -
codeforces 1480 D1 Painting the Array I (贪心)
题面题意把一个长度为n的数组分成两个子数组a,b,要求seg(a)+seg(b) 最大 ,seg(a)表示数组中不同的连续段,例如[1,1,2,2,3,3,3,1] 连续段就是[1,2,3,1] 长度是4题解我们采用贪心的思想考虑,假设v1是数组a的末尾元素,v2是数组b的末尾元素,我们依次遍历原数组中的元素,然后考虑放在a后还是b后是最优解如果v1==v2 ,a[i]放在哪里都一样,贡献值是0/1 ,如果v1 != v2, 如果是v1 == a[i] , a[i]放在v1后贡献值是0原创 2021-02-08 20:20:16 · 465 阅读 · 0 评论 -
codeforces 1475 D Cleaning the Phone 贪心+二分
原题链接题意清内存,每个应用都有ai的内存和bi的价值。t组数据,每组两个整数n,m,分别表示n个应用和需要清理s的内存,接着一行是n个数表示应用内存ai,接着一行是n个数表示应用价值bi,问你在清理的内存不低于m的前提下,使得删掉的价值最小,输出这个最小值。思路要想在清理相同的内存下所花费的最小,那么就要找性价比最大的,可以想到先排序,我们分成两类,价值是1和2的,然后从高到低进行排序,每次选取肯定是先选大的,后选小的,而且是选取的肯定是一段连续的区间所以,我们可以求其前缀和,然后在枚原创 2021-01-27 20:10:08 · 178 阅读 · 0 评论 -
codeforces 1471 C 贪心
原题链接题意t 组样例,n个朋友 ,m个礼物 ,n个朋友每个人对应一个下标 ki ,每个礼物对应的价格为 ci (价格按升序排列)要给每个朋友准备东西,可以给他们买一个不大于 j <=ki 的礼物 ,花费是 cj 美元,也可以直接给 c ki 美元求最后花费的最小值思路我们可以知道,k越大,它有的选择就会越多,直接将k排序,然后从末尾开始取局部最优解看题中范围开 long long ,输入用scanf ,养成习惯吧,这个wa了会很冤的一般模拟题都是先排序,之后在找规律,原创 2021-01-06 09:32:39 · 143 阅读 · 0 评论 -
cf 845C
原题链接题意思路1.这道题还是很好想到贪心的,题中看到左右两个端点,可以想到贪心的区间覆盖问题,这道题只是在这个基础变成了两个区域,但实际难度反而减小了2.我们先将所有的区间按照左端点排序,然后进行遍历,每次比较左端点,更新右端点就好,不满足条件直接输出NO3.具体看代码AC代码#include<bits/stdc++.h>using namespace std;const int N=2e5+10;typedef pair<int,int> PII原创 2021-01-03 15:41:28 · 195 阅读 · 0 评论 -
Codeforces Round #669 (Div. 2) B贪心
题目大意给定t个样例,每个样例给定一个长度为n的数组a,可以按任意顺序排列数组a得到数组b,对b进行gcd(求最大公约数),ci=gcd(b1,b2. . .bi),得到c数组,要求使得c数组最大(按照字典序)题目链接codeforces1407B解题思路具体解释在代码中因为是按照字典序排类,所有肯定是将a数组中最大的数放在第一位,因为最大的数对自己gcd任然是自己,放在第一位c数组中肯定是字典序俎AC代码import java.util.Arrays;import java.uti原创 2020-11-07 09:52:28 · 86 阅读 · 0 评论