学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:洛谷刷题C++语言 | 汇总_热爱编程的通信人的博客-CSDN博客
【题目描述】
目前帮派内共最多有一位帮主,两位副帮主,两位护法,四位长老,七位堂主,二十五名精英,帮众若干。
现在 absi2011 要对帮派内几乎所有人的职位全部调整一番。他发现这是个很难的事情。于是要求你帮他调整。
他给你每个人的以下数据:
他的名字(长度不会超过 30),他的原来职位,他的帮贡,他的等级。
他要给帮贡最多的护法的职位,其次长老,以此类推。
可是,乐斗的显示并不按帮贡排序而按职位和等级排序。
他要你求出最后乐斗显示的列表(在他调整过职位后):职位第一关键字,等级第二关键字。
注意:absi2011 无权调整帮主、副帮主的职位,包括他自己的(这不是废话么..)
他按原来的顺序给你(所以,等级相同的,原来靠前的现在也要靠前,因为经验高低的原因,但此处为了简单点省去经验。)
【输入】
第一行一个正整数 n,表示星月家园内帮友的人数。
下面 n 行每行两个字符串两个整数,表示每个人的名字、职位、帮贡、等级。
【输出】
一共输出 n 行,每行包括排序后乐斗显示的名字、职位、等级。
【输入样例】
9
DrangonflyKang BangZhu 100000 66
RenZaiJiangHu FuBangZhu 80000 60
absi2011 FuBangZhu 90000 60
BingQiLingDeYanLei HuFa 89000 58
Lcey HuFa 30000 49
BangYou3 ZhangLao 1000 1
BangYou1 TangZhu 100 40
BangYou2 JingYing 40000 10
BangYou4 BangZhong 400 1
【输出样例】
DrangonflyKang BangZhu 66
RenZaiJiangHu FuBangZhu 60
absi2011 FuBangZhu 60
BingQiLingDeYanLei HuFa 58
BangYou2 HuFa 10
Lcey ZhangLao 49
BangYou1 ZhangLao 40
BangYou3 ZhangLao 1
BangYou4 ZhangLao 1
【代码详解】
#include <bits/stdc++.h>
using namespace std;
struct people {
string name, zw;
int bg, dj, sx;
}p[115];
bool cmp1(people p1, people p2)
{
if (p1.bg != p2.bg) return p1.bg > p2.bg;
return p1.sx < p2.sx;
}
string its(int n)
{
if (n==0) return "BangZhu";
if (n<=2) return "FuBangZhu";
if (n<=4) return "HuFa";
if (n<=8) return "ZhangLao";
if (n<=15) return "TangZhu";
if (n<=40) return "JingYing";
return "BangZhong";
}
int sti(string s) {
if (s=="BangZhu") return 0;
if (s=="FuBangZhu") return 1;
if (s=="HuFa") return 2;
if (s=="ZhangLao") return 3;
if (s=="TangZhu") return 4;
if (s=="JingYing") return 5;
return 6;
}
bool cmp2(people p1, people p2)
{
int tmp1 = sti(p1.zw), tmp2 = sti(p2.zw);
if (tmp1!=tmp2) return tmp1 < tmp2;
if (p1.dj!=p2.dj) return p1.dj > p2.dj;
return p1.sx < p2.sx;
}
int main()
{
int n;
cin >> n;
for (int i=0; i<n; i++) {
cin >> p[i].name >> p[i].zw >> p[i].bg >> p[i].dj;
p[i].sx = i;
}
sort(p+3, p+n, cmp1);
for (int i=0; i<n; i++) p[i].zw = its(i);
sort(p+3, p+n, cmp2);
for (int i=0; i<n; i++) {
cout << p[i].name << " " << p[i].zw << " " << p[i].dj << endl;
}
return 0;
}
【运行结果】
9
DrangonflyKang BangZhu 100000 66
RenZaiJiangHu FuBangZhu 80000 60
absi2011 FuBangZhu 90000 60
BingQiLingDeYanLei HuFa 89000 58
Lcey HuFa 30000 49
BangYou3 ZhangLao 1000 1
BangYou1 TangZhu 100 40
BangYou2 JingYing 40000 10
BangYou4 BangZhong 400 1
DrangonflyKang BangZhu 66
RenZaiJiangHu FuBangZhu 60
absi2011 FuBangZhu 60
BingQiLingDeYanLei HuFa 58
BangYou2 HuFa 10
Lcey ZhangLao 49
BangYou1 ZhangLao 40
BangYou3 ZhangLao 1
BangYou4 ZhangLao 1