思维(构造、贪心)
文章平均质量分 71
1
Gh0st_Lx
ACMer蒟蒻 / 北航研0
展开
-
CCPC.2017哈尔滨站-重现赛 题解BFHM
目录F题目陈述算法思路代码实现H题目陈述算法思路代码实现M题目陈述算法思路代码实现B题目陈述算法思路代码实现按照训练赛AC先后顺序来F题目陈述大意:构造一个permutationpermutationpermutation,使得pi≡0(mod(pi−pi−2))p_i \equiv 0 \pmod {(p_i - p_{i-2})}pi≡0(mod(pi−pi−2))算法思路一个数mod−1mod-1mod−1或111总是为0构造1,n, 2, {n - 1}, 3 ,{n - 2}原创 2021-09-08 21:23:40 · 313 阅读 · 0 评论 -
NC600牛牛分蛋糕(二分)
题目陈述大意:给定两种若干数量的蛋糕和一些盘子,问所有的分法中,蛋糕数量最少的盘子中分到最多的蛋糕数量是多少。所有分法应该满足:同一个盘子不装有两种蛋糕、每个盘子都有蛋糕。算法一:朴素做法算法思路为了不多次重复冗余的文字,接下来我们约定,将蛋糕数量最少的盘子中分到最多的蛋糕数量称为ansansans。我们先这样分析,如果有xxx个盘子,只有一种蛋糕,数量为aaa,那么所有分法的ansansans就是a/xa/xa/x为什么?此处我们感性理解一下,取ansansans的时候,一定是所有盘子的最大原创 2021-09-02 21:47:03 · 173 阅读 · 0 评论 -
洛谷P6505 Run Away[计算几何][分治]
题目原题链接:点这里思路将一个点扩成一个圆二分圆的半径,如果当前圆能覆盖矩形的四个角,说明它能覆盖矩形如果不能,则将矩形分割为四个小矩形,递归判断递归边界l < eps && r < eps,这种情况可以把l,r看为一个点,就说明必然没有圆能覆盖到了,返回false代码实现#pragma GCC optimize("O3")#include <bits/stdc++.h>#include <unordered_map>#inclu原创 2021-08-17 22:04:54 · 114 阅读 · 0 评论 -
NC631 牛牛的冰激凌
题目描述大意:公司让你负责m个冰激凌的运输。运输车的冷库只够装n个冰激凌,一次运输需要t分钟,返回也需要t分钟。每个冰激凌制作好有一个时间。求最短运输完所有冰激凌的时间,以及在时间最短的情况下最少运输次数。算法一:动态规划思路引入(此处默认已经将c数组排序过了)一个很直观的思路,如果我当前有n个冰淇淋,并且我人已经在工厂了,我肯定是立马送出因为如果我在原地还等待,就算制作出了n+1个冰淇淋,我也依旧不能运输出去因为冰淇淋没有差别,如果第i个冰淇淋和第i+1个都生产出来了,所以我们没必要选择第原创 2021-07-23 19:41:53 · 125 阅读 · 0 评论 -
NC630 牛牛摆放花
题目陈述大意:n朵花排成一圈,最小化相邻两朵花高度差的最大值,输出最大值。约定:将所求值成为丑陋值,即要求最小的丑陋值算法一:暴力做法算法思路因为已经知道了有n个数字,我们只需要生成这n个数字的所有排序然后依次计算每个序列的丑陋值,依次更新ans,求出最小的即可代码实现class Solution {public: int arrangeFlowers(int n, vector<int>& a) { sort(a.begin(),a.e原创 2021-07-22 21:46:51 · 431 阅读 · 0 评论 -
剑指offer28 数组中出现次数超过一半的数字
目录算法一:哈希映射算法思路复杂度分析使用map使用unordered_map代码实现算法二:排序算法思路代码实现C++Python3复杂度分析算法三:性质构造法算法思路代码实现复杂度分析算法一:哈希映射算法思路开一个map容器或者是unordered_map容器来记录一个数出现的次数,最后在逐个访问容器中的元素,找到比⌊len2⌋\lfloor \cfrac{len}{2} \rfloor⌊2len⌋大的那个就行了复杂度分析值得注意的是map和unordered_map内嵌数据结构是不同原创 2021-07-21 17:24:09 · 87 阅读 · 0 评论 -
JZ33_丑数
文章目录题目陈述算法一:质因数分解(暴力)算法实现代码实现复杂度分析算法二:集合+优先队列思路引入思路推进考虑复杂度代码实现算法三:三指针做法算法思路动画演示代码实现C++Python题目陈述描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。算法一:质因数分解(暴力)算法实现一个很朴素的做法从1∼∞1 \sim \infty1∼∞每次+1,一直枚举,直到找到原创 2021-06-21 18:01:04 · 120 阅读 · 0 评论 -
JZ27_字符串的排序
目录题目陈述方法一:O(nn)O(n^n)O(nn)做法算法思路代码实现思考:是否一定需要用set算法二:O(n!)O(n!)O(n!)做法算法思路证明:算法正确性复杂度分析互异性证明动画演示代码实现C++python题目陈述大意:给定一个字符串,求出它的字符的所有排序(元素可能有重复),并且答案按从小到大给出方法一:O(nn)O(n^n)O(nn)做法算法思路递归搜索进行搜素,对于第h层,枚举第h个位置,应该填入什么下标的元素注意:此处因为字符串可能有重复的元素,故我们记录的是下标,因为下标原创 2021-06-19 19:02:29 · 145 阅读 · 0 评论 -
JZ32 把数组排成最小的数
目录题目陈述算法1:朴素做法算法思路方法1: 递归生成全排序方法2:库函数生成全排序复杂度分析算法2:贪心+排序算法思路具体实现1. int转为string方式C++python2. 排序方式1. 仿函数2. 类中static函数3.lambda表达式C++Python题目陈述大意:给定一个数组,,将数组凭借成一个字符串,使得字符串的字典序最小算法1:朴素做法算法思路显然,n个数排序有Ann=n!A^n_n=n!Ann=n!种序列最朴素的做法,我们在这n!n!n!种排序中,每个都拼接成字符串原创 2021-06-19 03:46:37 · 96 阅读 · 0 评论 -
NC22 合并两个有序的数组
目录一、题目描述二、算法1算法思路代码实现2.算法2算法思路动画演示代码实现C++代码python代码一、题目描述NC22合并两个有序的数组原题链接https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665?tpId=117题目大意:给定递增数组A,B,合并A,B的元素,使合并过后的数组是递增的,并且存放在数组A中注意审题:题目中有一句话:可以假设A数组有足够的空间存放 B数组的元素,即无需考虑溢出问题,或理解为A数组空间足原创 2021-06-16 16:34:59 · 145 阅读 · 0 评论 -
21山东省赛B(gcd最小生成树)
题目原题链接:点这里题解算法思路还是没有发散性思维,比赛时候没有想到这个很明显的随机数函数,还在纠结有没有规律,这个东西一旦敲定,就要下定论,别把时间花在无意义的地方质数的分布密度……代码实现#include<bits/stdc++.h>#include<unordered_map>#include<unordered_set>using namespace std;#define el '\n'#define cl putchar('\n原创 2021-05-24 23:14:57 · 222 阅读 · 0 评论 -
(LR机器人爆炸)CF1525C(括号匹配)
题目CF1525C :点这里题目大意:给定n,m,其中n代表机器人,m代表边界,每个机器人有方向L,R,走到同一位置上面会爆炸,走到0或边界m上面,下一秒会改变方向返回,最后输出每个机器人爆炸的时间算法思路括号匹配思路,用堆栈来做,L相当于右括号,R相当于左括号,对撞相当于匹配只有坐标的奇偶性相同,才有可能对撞,因为同向移动,距离改变0,异向移动,距离改变为-2或+2,奇偶性永远不会改变,所以只需要针对奇偶性,分开处理坐标为奇数,和坐标为偶数的即可将坐标按照从小到大排序一遍,然后i从1到n开始原创 2021-05-17 10:58:00 · 731 阅读 · 0 评论 -
(日期截至背包)lab9_Date_deadline_knapsack
题目算法思路对商品进行排序,截至日期小的排在前面,相同日期,价值大的排在前面如果在当前天数now之前,则直接选择我们把已经选择了的物品,丢入小根堆中维护如果==now,则我们跟小根堆的top比较大小,如果价值大于它,堆顶pop,把第i个物品丢入小根堆,因为那一天,第i个物品必然还未截至,我们可以不买原本计划买的那个物品,直接选取买第i个物品(显然这是一种正确的策略)代码实现/*日期截止日期背包贪心策略,加堆先选择,然后替换掉原来的决策*/#include<bits/s原创 2021-05-15 21:16:36 · 158 阅读 · 0 评论 -
开关问题(Switch_problem)
开关问题也叫做“反转”,每一个点有有限个状态,可以操作某个点,改变若干点,最后所有点都变成同一状态,所需要的最小步数题目链接POJ3276原题链接:点这里算法思路强行搜索的话,状态总共有2N2^N2N种,必然T同一个位置从操作两次,是没有任何意义的,所以每个位置最多被当作头操作一次通过一个sum来维护,前面对后面的影响,i每次移动一个,sum中可能减少的只有f[i-k+1](最左端),当然此处要判断下标是否大于0因为最后k-1个无法被当作起点,所以需要检查合法性每个长度k都搜索一遍,原创 2021-05-15 21:07:13 · 288 阅读 · 0 评论 -
尺取法(Determining the feet)
题目链接POJ3061:点这里POJ3320:点这里算法思路O(n)时间复杂度的算法,双指针s和t移动,算法最初用于求解,总和不小于S的连续子序列的长度的最小值代码实现/*(Determining the feet)尺取法*/#include<iostream>#include<algorithm>// #include <bits/stdc++.h>// #include <unordered_map>// #include原创 2021-05-11 16:46:46 · 119 阅读 · 0 评论 -
CF1521C(交互题)Nastia and a Hidden Permutation
CF1521C题目大意比赛反思算法思路代码实现题目大意3n2+30\cfrac{3n}{2}+3023n+30次询问,求解出这个隐藏的序列(permutation)。比赛反思自己迟迟没有想出来,还是xun巨告诉自己的。原因总结一下大概有以下几点交互题做的太少,没有信心,每个输出后面都要加一个fflush(stdout),并且原来CF如果wa1看输出没有注意数据范围,CF中很多题目,会有多解,类似思维题,构造题,这个时候就可以利用数据范围,化繁为简。当然,有的题目不通过数据范围必然做不出原创 2021-05-08 04:12:07 · 174 阅读 · 0 评论 -
CF#1515C (高塔贪心)
题目链接https://codeforces.com/contest/1515/problem/C算法思路将id数组排序,按照方块的高度排序{return a[c]>a[d]},优先放最大的优先队列,当前塔中,高度最低的塔,放上去然后遍历完所有的之后,再判断其中最高的塔和最低的塔的高度查是否大于h即可代码实现#include<bits/stdc++.h>#include<unordered_map>#include<unordered_set>u原创 2021-05-03 03:28:40 · 345 阅读 · 0 评论 -
CF#1515D(左右袜子颜色匹配)
题目原题链接:点击这里题目大意:给定若干只有颜色的左右袜子,左右互变,或者变颜色,代价都是1,求全部都是匹配的最小花费思路比赛时候的模拟后的第一反应的错误思路:优先变颜色问过扣巨后的正确思路:中途自己写这个代码的时候,一直出bug,就是因为没有分清楚sum1和mp1.size(),显然sum1比mp1.size大的多,因为mp1中的value可以大于1,所以还是想清楚在写代码实现#include<bits/stdc++.h>#include<unordered_map&原创 2021-05-03 03:24:41 · 139 阅读 · 0 评论 -
列车调度(贪心)
题目原题链接: 点击这里思路只需要记录队尾的元素即可 ,因为输出要求递减,则维护从大到小的队列即可为何是贪心?选择第一个大于它的值即可,贪心思路,留给其他后续X的机会更大例如插入1,8,7现在有队列9 2插入1 9的话,则后面8 7 就必然要再开一个队列,必然不是最优的了详细证明依旧用替换法,证明贪心策略不会比最优解劣代码实现#include<bits/stdc++.h>#include<unordered_map>#include<unorder原创 2021-05-01 16:55:54 · 117 阅读 · 0 评论 -
ac1412. 邮政货车(插头DP)
题目原题链接:点击这里大致题意:求解n*4的方格中,哈密顿回路的数量思路表示的方法还是跟插头dp的左右表示法一样,这边(打表)注意起始状态和终止状态的合法性代码实现因为这题里面嵌套了高精度,所以建议先打低精度的正解,再打高精度#include<bits/stdc++.h>#include<unordered_map>#include<unordered_set>using namespace std;#define el '\n'#defin原创 2021-05-02 01:55:52 · 106 阅读 · 0 评论