首页 > 其他分享 >洛谷题单指南-模拟和高精度-P1786 帮贡排序

洛谷题单指南-模拟和高精度-P1786 帮贡排序

时间:2024-01-24 14:55:41浏览次数:36  
标签:p2 cmp2 p1 title int 洛谷题 Person 帮贡 P1786

原题链接:https://www.luogu.com.cn/problem/P1786

题意解读:

此题比较简单,模拟+排序即可解决。需要注意的是,当帮贡或者等级相同时,都要保持原来的顺序,因此需要记录每个人的编号,便于排序。

话不多说,直接上代码。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 120;

struct Person
{
    int id;
    string name;
    string title;
    long long score;
    int level;
};

Person bangzhu;
vector<Person> fubangzhu;
vector<Person> hufa;
vector<Person> zhanglao;
vector<Person> tangzhu;
vector<Person> jingying;
vector<Person> bangzhong;

Person persons[N];
int cnt = 0;

//按帮贡排序
bool cmp1(Person p1, Person p2)
{
    if(p1.score == p2.score) return p1.id < p2.id;
    return p1.score > p2.score;
}

//按等级排序
bool cmp2(Person p1, Person p2)
{
    if(p1.level == p2.level) return p1.id < p2.id;
    return p1.level > p2.level;
}

void print(Person &p)
{
    cout << p.name << " " << p.title << " " << p.level << endl;
}

void printAll(vector<Person> &v)
{
    for(auto p : v) print(p);
}

int main()
{
    int n;
    cin >> n;

    for(int i = 0; i < n; i++)
    {
        Person p;
        p.id = i;
        cin >> p.name >> p.title >> p.score >> p.level;
        if(p.title == "BangZhu") bangzhu = p;
        else if(p.title == "FuBangZhu") fubangzhu.push_back(p);
        else persons[cnt++] = p;
    }

    //将除帮主、副帮主以外的人按帮贡排序,帮贡相同的保持原来的顺序
    sort(persons, persons + cnt, cmp1);

    //对每个人分配职位
    for(int i = 0; i < cnt; i++)
    {
        Person p = persons[i];
        if(i < 2) p.title = "HuFa", hufa.push_back(p);
        else if(i < 6) p.title = "ZhangLao", zhanglao.push_back(p);
        else if(i < 13) p.title = "TangZhu", tangzhu.push_back(p);
        else if(i < 38) p.title = "JingYing", jingying.push_back(p);
        else p.title = "BangZhong", bangzhong.push_back(p);
    }

    //输出信息
    print(bangzhu);
    sort(fubangzhu.begin(), fubangzhu.end(), cmp2);
    printAll(fubangzhu);
    if(hufa.size())
    {
        sort(hufa.begin(), hufa.end(), cmp2);
        printAll(hufa);
    }
    if(zhanglao.size())
    {
        sort(zhanglao.begin(), zhanglao.end(), cmp2);
        printAll(zhanglao);
    }
    if(tangzhu.size())
    {
        sort(tangzhu.begin(), tangzhu.end(), cmp2);
        printAll(tangzhu);
    }
    if(jingying.size())
    {
        sort(jingying.begin(), jingying.end(), cmp2);
        printAll(jingying);
    }
    if(bangzhong.size())
    {
        sort(bangzhong.begin(), bangzhong.end(), cmp2);
        printAll(bangzhong);
    }

    return 0;
}

 

标签:p2,cmp2,p1,title,int,洛谷题,Person,帮贡,P1786
From: https://www.cnblogs.com/jcwy/p/17984679

相关文章

  • 洛谷题单指南-模拟和高精度-P1098 [NOIP2007 提高组] 字符串的展开
    原题链接:https://www.luogu.com.cn/problem/P1098题意解读:题目本身是一道模拟题,但是细节点较多,要拿100分,有以下注意点:1、-号两个需要同时为小写字母或者数字,才进行填充2、-号左边>=右边,直接输出-3、对待填充的内容的处理,可以先看是否填充*;小写字母和数字的填充都是前一位asci......
  • 洛谷题单指南-模拟和高精度-P1067 [NOIP2009 普及组] 多项式输出
    原题链接:https://www.luogu.com.cn/problem/P1067题意解读:模拟法依次输出多项式内容即可,但是需要考虑的周全,主要有以下关键点:1、系数为0时不输出多项式2、第一个符号,只有负号才输出3、次数不为0时,不输出为1的系数;次数为0时,输出所有系数4、次数为1时,不输出次数;次数为0时不输......
  • 洛谷题单指南-模拟和高精度-P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two
    原题链接:https://www.luogu.com.cn/problem/solution/P1518题意解读:此题是一道模拟题,关键要解决几个问题:1、如何转换方向2、如何在地图中移动3、如何判断无法抓住牛。解题思路:定义chara[10][10]用于存储地图,cx,cy和fx,fy分别代表牛、Farmer所在的位置,cdir、fdir分别代表牛......
  • 洛谷题单指南-模拟和高精度-P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    原题链接:https://www.luogu.com.cn/problem/P1328题意解读:非常简单的一道题,核心考点就是循环数组以及评分规则的构建。评分规则:甲vs乙,1表示甲赢,-1表示甲输,-0表示平转化为数组:intrule[5][5]={0,-1,1,1,-1,1,0,-1,1,-1,-1,1,0,-1,1,-1,......
  • 洛谷题单指南-模拟和高精度-P4924 [1007] 魔法少女小Scarlet
    原题链接:https://www.luogu.com.cn/problem/P4924题意解读:根据题意,通过模拟法,枚举每一个要旋转的矩阵,执行旋转操作即可,关键点在于如何进行矩阵旋转。设定矩阵inta[][],临时矩阵intt[][]用于保存旋转后的矩阵,矩阵长度为len。先考虑要旋转的区域左上角是a[0][0]的情况,区域内每......
  • 洛谷题单指南-模拟和高精度-P1601 A+B Problem
    原题链接:https://www.luogu.com.cn/problem/P1601题意解读:本题是高精度加法的模版题。知识点解析:  高精度加法:  如果一个数大到远超过整形变量的范围时,就不能使用int、long、longlong等变量来存储整数,也不能直接通过变量加法来求和。  因此,需要回到加法计算的本质,从个......
  • 洛谷题单指南-模拟和高精度-P1563 [NOIP2016 提高组] 玩具谜题
    原题链接:https://www.luogu.com.cn/problem/P1563题意解读:本题关键在于根据小人的朝向和寻找的方向来确定数组下标的变化。用数组存储小人,intd[]存朝向,inta[]存名称,朝向和寻找方向有4种组合:朝向(0:向内,1:向外)  寻找方向(0:左,1:右)  数组下标操作00顺时针寻找,下标递减......
  • 洛谷题单指南-模拟和高精度-P1042 [NOIP2003 普及组] 乒乓球
    原题链接:https://www.luogu.com.cn/problem/P1042题意解读:分别针对11分制和21分制,输出每局比分。只需要判断一局的结束条件:得分高者如果达到11或者21,且比分间隔大于等于2分,则表示一局结束,可开始下一局,用模拟法即可解决。100分代码:#include<bits/stdc++.h>usingnamespaces......
  • 洛谷题解 | AT_abc321_c Primes on Interval
    目录题目翻译题目描述输入格式输出格式样例#1样例输入#1样例输出#1样例#2样例输入#2样例输出#2样例#3样例输入#3样例输出#3题目简化题目思路AC代码题目翻译【题目描述】你决定用素数定理来做一个调查.众所周知,素数又被称为质数,其含义就是除了数字一和本身之外不能......
  • 关于洛谷题解审核
    我想问一下,大家觉得题解的重点是什么?很显然是思路,代码的正确性,次要的才是格式。但是,洛谷对于题解格式的审核是不是有点过于严格了呢?比如说这段话:如果\(n\)为\(0\),那么便是无解。大家能一眼看出,后面多了空格吗?这种题解其实没什么大问题,别人看题解时根本不会在意这些......