P1177 快速排序
利用二分 + 快排模板 , 开始我没有选择中间元素作为基数结果就TLE
题目
P1059 明明的随机数
要求排序 + 除重 , 排序可直接用上题现成代码,关键是除重,可以用vector
for(int i = a[2]; i <= a[n]; i ++)
if(f[i].size() != 0 && i != a[1])
cout << " " << f[i][0];
P1068 分数线划定
需要按分数排序,在分数相等的情况下再对报名号排序;
int cmp(p a, p b) {
if(a.gra == b.gra) return (a.num < b.num);
else return (a.gra > b.gra);} //num,gra分别为报名号和分数
sort(f, f + n, cmp);
P1781 宇宙总统
大数排序,使用字符串即可;在字符串长度相等时直接比较字符串大小;不等式按长度比较;
int cmp(p f1, p f2) {
if(f1.len == f2.len) return f1.ps > f2.ps;
else return (f1.len > f2.len);}
sort(f + 1, f + n + 1, cmp);
总结:
-
快排(每次选择中间元素作为基数)
-
sort 与 cmp 在排序中的应用