
排序
总结各种排序的算法的题
S atur
要变成萤火虫~
展开
-
E.Figure Skating (字符串排序/签到) (2021年度训练联盟热身训练赛第五场 )
传送门题意:给出n个人的历史排名成绩和现在排名成绩,如果有人进步就输出进步最大的人名,否则输出"suspicious"。思路: 1.可以结构体排序写 2.也可直接标记前后排名情况,如果没有一点改变就是可疑,否则必定有进步的人,找出进步最大者即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long.原创 2021-05-07 00:16:13 · 268 阅读 · 0 评论 -
Codeforces A. Johnny and Contribution(思维 / 拓扑排序)
传送门题意: 给定一张 n 个点 m 条边的图。你需要给每个点写上数字,其数字为所有与它相邻且被写上数字的点中没出现过的最小的正整数。请求出一种写数字的顺序使得编号为 i 的点上的数字为给定序列p[i]。无解直接输出 -1。思路:对于i号点必须满足与它相邻的数必须包含[1,p[i]),且不包含p[i]才能有解。如果满足上述条件,则按照 p序列 从小到大写数字就是一个符合条件的顺序。不过也可以用拓扑排序来写。代码实现:#include<bits/stdc++.h>#defin原创 2020-08-16 22:33:01 · 447 阅读 · 1 评论 -
洛谷:P1104 生日 (结构体排序)
传送门思路: 虽然是个水题,但是不认真读题的下次就是一直wa,一定记着在结构体排序时同年同月同日生的人要 id大的在前。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(x) (x &(-x))#define ls(x原创 2020-08-12 00:05:14 · 787 阅读 · 0 评论 -
洛谷 : P1012 拼数(字符串排序)
传送门思路:很神奇的题,将元素看做字符串再排个序竟然就过了!不过要注意在cmp中不能直接比较a,b串,因为string的比较会受长度的影响,而要想数更大则必须大数字靠前。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(x原创 2020-07-29 23:54:04 · 380 阅读 · 0 评论 -
C - 璀璨光滑 (bfs & 排序贪心 & 二进制位运算) (牛客算法周周练15)
传送门题意: 有一张2n个点的无向图,这个图上每个点标上了0到2 ^ (n-1)之间不同的数字。记pi为第i个点的标号,那么u和v之间连边当且仅当pu与pv的二进制表示恰好有一位不同。现在告诉了你这张图,但是每个点的标号不见了,请找到一个字典序最小的标号方式,即先比较p1,如果相同的话比较p2,依次类推。思路:输出2 ^ n个不同的数——说明每个点的标号都能被找到,意味着这是张连通图。且已明文规定是找最小字典序的标号序,所有这样找下来的答案就是唯一且确定的(因为1号点的标号一定是0)。利用b转载 2020-07-16 22:16:02 · 188 阅读 · 0 评论 -
归并排序:逆序对的数量
题目链接:https://www.acwing.com/problem/content/790/输入样例:62 3 4 5 6 1输出样例:5**思路:**利用归并排序的思维统计逆序对的数量,可分为三种情况。代码实现:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int...原创 2020-01-13 20:40:34 · 202 阅读 · 0 评论 -
归并排序
题目链接:https://www.acwing.com/problem/content/789/思路:其实归并和快排一样都是采用的分治思想,但快排是用一个数来分治,先处理再递归,而归并确是以数组每次的中间点为分界线,先递归处理排序,然后将两个有序的数组合并成一个。在合并时用两个指针移动标记,将两个有序的数组转移到一个另开的储存数组中。输入样例:53 1 2 4 5输出样例:1 2...原创 2020-01-13 19:42:28 · 142 阅读 · 0 评论 -
快速排序:求第k位置的数
题目链接:https://www.acwing.com/problem/content/788/输入样例:5 32 4 1 5 3输出样例:3思路:还是快排的核心思路,但是可以优化,即如果只是要寻找第k个数,那就不用排序整个区间,只需要递归快排前k个数或后n-k+1个数即可。代码实现:#include<bits/stdc++.h>using namespace st...原创 2020-01-13 15:59:13 · 275 阅读 · 0 评论 -
快速排序
快排的时间复杂度为O(n*logn),显然会比冒泡排序O(n^2)快很多啦。快排主要是采取分治的思维:**1.**确定分界点:x取(四种选择)a[l],a[(l+r)/2],a[r]和随机点啦。**2.**调整区间:用i标记左边第一个位置的数,依次向后方遍历,如果遇见一个数但与等于x便停下来;用j标记最右边的一个数,依次向前方遍历到第一个小于等于x的数,将i和j位置的数相互交换后i和j再移动一...原创 2020-01-12 14:11:48 · 134 阅读 · 0 评论