首页 > 其他分享 >团体天梯练习 L2-027 名人堂与代金券

团体天梯练习 L2-027 名人堂与代金券

时间:2023-04-19 10:45:16浏览次数:49  
标签:int 027 代金券 名人堂 edu include com id

L2-027 名人堂与代金券

对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到 \(60\) 分及以上,并且有另加福利:总评分在 \([G, 100]\) 区间内者,可以得到 \(50\) 元 PAT 代金券;在 \([60, G)\) 区间内者,可以得到 \(20\) 元 \(PAT\) 代金券。全国考点通用,一年有效。同时任课老师还会把总评成绩前 \(K\) 名的学生列入课程“名人堂”。本题就请你编写程序,帮助老师列出名人堂的学生,并统计一共发出了面值多少元的 \(PAT\) 代金券。

输入格式:

输入在第一行给出 3 个整数,分别是 \(N\)(不超过 \(10 000\) 的正整数,为学生总数)、\(G\)(在 \((60,100)\) 区间内的整数,为题面中描述的代金券等级分界线)、\(K\)(不超过 \(100\) 且不超过 \(N\) 的正整数,为进入名人堂的最低名次)。接下来 \(N\) 行,每行给出一位学生的账号(长度不超过15位、不带空格的字符串)和总评成绩(区间 \([0, 100]\) 内的整数),其间以空格分隔。题目保证没有重复的账号。

输出格式:

首先在一行中输出发出的 \(PAT\) 代金券的总面值。然后按总评成绩非升序输出进入名人堂的学生的名次、账号和成绩,其间以 1 个空格分隔。需要注意的是:成绩相同的学生享有并列的排名,排名并列时,按账号的字母序升序输出。

输入样例:

10 80 5
[email protected] 78
[email protected] 87
[email protected] 65
[email protected] 96
[email protected] 39
[email protected] 87
[email protected] 80
[email protected] 88
[email protected] 80
[email protected] 70

输出样例:

360
1 [email protected] 96
2 [email protected] 88
3 [email protected] 87
3 [email protected] 87
5 [email protected] 80
5 [email protected] 80


解题思路

模拟题。稍微有点难度的地方在于题中给出了名人堂的最底名次,并且存在并列,这就需要记录上一次所用到的排名编号以及此排名编号的人数。

/*   一切都是命运石之门的选择  El Psy Kongroo  */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<cmath>
#include<functional>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<int, pii> piii;
typedef pair<double, double> pdd;
typedef pair<string, int> psi;
typedef __int128 int128;
#define PI acos(-1.0)
#define x first
#define y second
//int dx[4] = {1, -1, 0, 0};
//int dy[4] = {0, 0, 1, -1};
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;


const int N = 10010;
int n, g, k;
vector<psi> p;    //存储人的姓名 分数
int sum;          //总代金券
int id[N];        //记录排名

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    cin >> n >> g >> k;
    while(n -- ){
        psi cur; cin >> cur.x >> cur.y;
        if(cur.y >= 60 && cur.y < g) sum += 20;
        else if(cur.y >= g && cur.y <= 100) sum += 50;
        p.push_back(cur);
    }

    cout << sum << endl;
    sort(p.begin(), p.end(), [](psi &a, psi &b){
        if(a.y != b.y) return a.y > b.y;
        return a.x < b.x;
    });

    int pre = p[0].y, pre_id = 1, cnt = 0;   //记录上一次用到的分数及排名 记录处于此排名的人数
    id[0] = 1;
    for(int i = 1; ; i ++ ){
        if(p[i].y == pre) id[i] = pre_id, cnt ++ ;   //并列
        else if(p[i].y < pre) id[i] = pre_id += cnt + 1, cnt = 0;
        pre = p[i].y;
        if(pre_id > k) break;
    }

    for(int i = 0; id[i] <= k && id[i]; i ++ )
        cout << id[i] << ' ' << p[i].x << ' ' << p[i].y << endl;

    return 0;
}

标签:int,027,代金券,名人堂,edu,include,com,id
From: https://www.cnblogs.com/MAKISE004/p/17332429.html

相关文章

  • 天梯赛L1-027 出租
    一、问题描述下面是新浪微博上曾经很火的一张图:一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推……很容易得到电话号码是18013820100。本题要......
  • 题目 1027: [编程入门]自定义函数处理最大公约数与最小公倍数
    题目描述写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。输入格式两个数输出格式最大公约数最小公倍数样例输入复制615样例输出复制330解题思路:欧几里得算法又称辗转相除法,用来求两......
  • 【送猫超卡、阿里云代金券】动手体验 SAE+云效 10 分钟快速打通 CI/CD 流水线
    作者:ServerlessServerless应用引擎SAE是阿里云推出的一款全托管、免运维、高弹性的通用PaaS平台。SAE提供了无门槛的容器化、主流微服务和Job任务的全托管,以及多语言监控的能力,对用户来说,是一款技术门槛更低、迁移改造更简单的Serverless平台。通过本实验,将带大家亲......
  • 「Gym102759B」Cactus Competition 题解
    传送门「Gym102759B」CactusCompetition题目大意有一个\(n\timesm\)的网格图,一个长度为\(n\)的序列\(a\),和一个长度为\(m\)的序列\(b\)。网格图中,第\(i\)......
  • pat 乙级 1027 打印沙漏
    ac但写得就像坨答辩过两天我自己都忘了这些变量用来干嘛的了1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<math.h>56int......
  • 027 反三角函数的求导公式推导
    027反三角函数的求导公式推导 ......
  • 天梯赛练习题L2(026-027)
    ###L2-026小字辈#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<LL,LL>PII;constLLMAXN=1e18;constLLN=100020,M=4002;//un......
  • 分析总结一下所有有关打印题目的套路和思路:pat乙级:1109 擅长C, 1008元素循环右移,1050
    分析:首先你要明白第一件事:所有要打印东西的题目打印都是从第一行到最后一行,从第一列到最后一列,你是没办法跳着打印的。可以看看其他几个打印题目1008元素循环右移,1050螺......
  • [gym102769D]Defend City
    以下描述部分方向代指该方向的塔,建议画图理解不妨假设左下的塔数\(\ge2\),这些塔覆盖区域构成阶梯形考虑阶梯的交点,若其被左上/右下覆盖,则总可以去掉其中一个左下换言之......
  • vus.js代码027
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>事件绑定</title><scripttype="text/javascript"src="../js/vue.js"></script></head>......