合集-贪心
摘要:原题链接 题解 1.题目可以抽象转化为,若干个点和线段,求问最多有多少点和线段能配对,如果点在线段内 2.我们可以采用贪心的方法,对点升序排序,对线段按右端点升序排序 为什么请看下图 code #include<bits/stdc++.h> using namespace std; struct n
阅读全文
摘要:原题链接 题解 1.模拟+贪心,我们一个一个点添加,一层一层遍历,每个节点对当前层的接口数的贡献是-1 如果是节点2,对下一层接口数贡献为2,节点1贡献为1 如果当前层接口数用完了就下一层,初始值层0设为1 在时间复杂度合理的情况下无所不用其极 code #include<bits/stdc++.h
阅读全文
摘要:原题链接 题解 反悔贪心 把工作按截至时间排序,每个工作有两个决策。 如果这个工作有时间做,那就做; 如果没时间做,就在已经做过的工作里取消价值最小的工作,换成当前工作(这里有一个前提,那就是每个工作需要的时间是一样的,而且当前工作的价值大于已经做过工作里价值最小的) code #include<b
阅读全文
摘要:原题链接 一句话题意 分别找出长度为n,每位数字和恰好为m的最小数和最大数,如果找不到输出”-1 -1“ 思维 怎么确保构造的数最小/大? 怎么确保数字和恰好为m? 实施 遍历每一位,贪心地选取最大/最小的数,直到接下来的数字不足以贪心 细节 1.没有前导零 2.数字和恰好为m 3.注意边界特判 c
阅读全文
摘要:原题链接 题解 1.第 个位置上的数,对 的贡献最大不会超过 ,我们令其为 2.我们不去细想如何操作才能得到最优解,而是去想第一大的 是多少?第二大的 是多少? 3.对 降序排序得到 ,如
阅读全文
摘要:原题链接 题解 1. 已经改变不了了,所以要让插入的 尽量少地增加 所以要降序、从左到右插入 2. 的相对顺序不变 3.此时已知两个数组的相对顺序,因此我们可以贪心地输出两个数组顶端元素中较大的那个 为什么可以这样? 我们假设输出顶端元素较小
阅读全文
摘要:原题链接 题解 1.对于任意 和 ,最大异或和是唯一的 2.对于 来说,要想异或和最大,则 要尽量满足每一位上的数相同,比如都是0,或者都是1,所以最优配对的 一定是大小最接近 的 ,因为
阅读全文
摘要:原题链接 题解 1.操作1肯定选最小的 2.操作2不在乎数的大小 3.因此我们可以优先实施操作1,然后再实施操作2 code #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+5; l
阅读全文
摘要:原题链接 题解 1.改变座位之后,保持人的相对顺序不变一定使答案不劣 2. 不是很大,因此可以考虑 的做法 3.令 为第 个人移到位置 ,且 的人都已经移到了最优位置时的最小花费,\(index[
阅读全文
摘要:原题链接 题解 考虑从左到右第一个在游客范围里的公寓,显然把这个公寓分给范围里最左边的游客最优,因为右边的游客更高概率遇到公寓 code #include<bits/stdc++.h> #define ll long long #define lowbit(x) ((x)&(-x)) using n
阅读全文