
Lv.1
代码是用头发编织起来的,但不允许用白发
签名:师傅:我要上首页
在 请求进入工作室 中回复
这个工作室现在不如以前,在我刚加入的时候室长几乎是无微不至,活跃度爆炸,一直监督着我们做作品,可以说......是这个工作室最巅峰的时期了,至少在我经历的这段时间里是。现在不更新也没人催了,看缘分更了
2022-01-13T21:45:28 点赞:0
在 【无聊,写个C++代码】 中回复
如果总分一样时要按数学排,数学再一样时按语文排,语文再一样时按名字的字典序排,你要怎么办?
很简单,不就写3个if嘛……
那其实还有一种更好的解决方案:sort+cmp。
两者结合真的非常非常非常好用!!!!!
sort非常方便,它碾压了很多好写但效率不高的排序,二分排序除外,但它很难写……
头文件:#include <algorithm>
格式:sort(l+1,r+1)//下标从“1”开始时格式是这个,从零开始为sort(l,r)
进阶:sort(l+1,r+1,cmp);//多用于结构体,巨好用
如果想要达到我说那种效果,具体代码即如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct node
{
string name;
int ch,ma,to;
}a[100];
bool cmp(node a,node b)
{
if(a.to!=b.to) return a.to>b.to;
if(a.ma!=b.ma) return a.ma>b.ma;
if(a.ch!=b.ch) return a.ch>b.ch;
return a.name>b.name;
}
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%s %d %d",a[i].name,a[i].ch,a[i].ma);
a[i].to=a[i].ch+a[i].ma;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i) printf("%s %d %d %d",a[i].name,a[i].ch,a[i].ma,a[i].to);
}
清爽了不少,不是吗?
sort本身也很喵,你不想写排序可以用它(上文说过它比一般的排序快很多),除非是喵板子题不让用sort。
2022-08-24T07:03:50 点赞:0