每日一题 『谁在说谎

2023-12-06 10:50
文章标签 每日 说谎

本文主要是介绍每日一题 『谁在说谎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

L1 - 7 『谁在说谎』

分数 20

全屏浏览题目

切换布局

作者 JMU_ACM

单位 集美大学

  • 贝贝(并不)是一个“知乎迷”
  • 于是贝贝今天打开知乎,就刷到了以下的内容

zh.png

  • 贝贝恍然大悟,直接跟同学们讨论成绩的时候,大家都为了照顾最弱的贝贝,故意将各自的成绩报低了好几十分,为的就是照顾贝贝的感受,只有贝贝自己考的是真的低
  • 贝贝瞅了瞅自己68分的成绩单,一时间接受不了这个事实。
  • 所以,贝贝此时打算揪出有谁在谎报成绩
  • 于是贝贝从老师那边搞来了n个人(不包括贝贝的,因为贝贝本来就知道自己的成绩)前m次的真实考试成绩,并且通过水群得到了这n个人在群里面讨论时候报出的这次考试的成绩
  • 但是贝贝是个很笨的孩子,看不出有谁可能说谎,于是他就找到了一个神犇(也就是你),让你帮忙找出有谁可能说谎
  • 设贝贝前n次考试的平均成绩为x0​,这次考试的成绩为y0​,某个人的前n次考试成绩的平均值为xi​,这次考试报出的成绩为yi​。如果他之前的平均成绩比贝贝等于贝贝,这次考试报的成绩比贝贝,即xi​≥x0​,且yi​<y0​,那么他就有可能在说谎。
  • 本题要求你按字典序从小到大输出有可能说谎的人的姓名

输入格式:

第一行,输入正整数n和m,其含义同题意中的。

第二行,包含m个整数,代表贝贝前m次考试的真实成绩。

接下来的n行,对于第i行给定一个字符串S和m个整数,代表编号为i的人姓名为S,前m次考试的成绩。

最后一行,给定n+1个整数,分别为a0​到an​,其中a0​代表贝贝本次考试的真实成绩,ai​代表编号为i的人报出的本次考试成绩。

输出格式:

输出可能说谎的人的姓名,每个姓名占一行。如果没有人可能说谎则输出Yeah! Nobody!

输入样例:

4 3
68 68 68
WDW 100 100 99
HX 99 100 100
LBN 68 68 68
JXJ 100 100 99
68 67 65 68 60

输出样例:

HX
JXJ
WDW

Hint

对于本题100%的数据,1≤n≤20,1≤m≤105,S的长度在[1,5]之间,且仅由英文字母组成,且保证n个人中没有重复名字

因为大家可能会参加不同的满分制的比赛与考试,故题目中所有的单个成绩的范围都在[0,105]之间。特别的,考虑到贝贝是个菜狗,分数可能因为自身太菜被改卷老师扣成负数,故贝贝的单个成绩范围在[−105,105].

题目虽然很长,但是看完题目,我们提取到的重要信息就是要知道每个人的名字,和他们的之前考试的平均成绩,还有当前考试的成绩 那么非常显然就需要用到结构体,来记录每个人的信息:

typedef struct node{string name;double oldgrade;double newgrade;
}stu;

 其中贝贝的成绩可以单独处理,不需要放入结构体当中

记录其他人的成绩:

 for(int i = 0;i<n;i++){cin>>tempname;temp = 0;for(int j = 0;j<m;j++){cin>>x;temp+=x;}stus[i].name = tempname;stus[i].oldgrade = (1.0*temp)/m;}

然后读取贝贝的成绩,和其他人的成绩 

int jay;//贝贝这次考试成绩cin>>jay;for(int i = 0;i<m;i++) {cin>>stus[i].newgrade;}

然后顶一个一个string的vector数组,来存放满足题目需要条件的人

vector<string> re;for(int i = 0;i<n;i++){if(stus[i].oldgrade>=BGrade&&stus[i].newgrade<jay)re.push_back(stus[i].name);}

因为题目要求需要升序,所以我们可以直接使用vectoer自带的sort函数,sort默认是升序,所以直接用就可以,然后输出就可以:

sort(re.begin(),re.end());if(re.empty()) cout<<"Yeah! Nobody!";for(int i = 0;i<re.size();i++)cout<<re[i]<<endl;

整体代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef struct node{string name;double oldgrade;double newgrade;
}stu;
int main()
{int n,m;cin>>n>>m;string tempname;double BGrade = 0,temp = 0;stu stus[n];int x;for(int i = 0;i<m;i++){cin>>x;BGrade+=x;}BGrade = 1.0*BGrade/m;for(int i = 0;i<n;i++){cin>>tempname;temp = 0;for(int j = 0;j<m;j++){cin>>x;temp+=x;}stus[i].name = tempname;stus[i].oldgrade = (1.0*temp)/m;}int jay;cin>>jay;for(int i = 0;i<m;i++) {cin>>stus[i].newgrade;}vector<string> re;for(int i = 0;i<n;i++){if(stus[i].oldgrade>=BGrade&&stus[i].newgrade<jay)re.push_back(stus[i].name);}sort(re.begin(),re.end());if(re.empty()) cout<<"Yeah! Nobody!";for(int i = 0;i<re.size();i++)cout<<re[i]<<endl;return 0;
}

这篇关于每日一题 『谁在说谎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461555

相关文章

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

每日一题——第八十一题

打印如下图案: #include<stdio.h>int main() {int i, j;char ch = 'A';for (i = 1; i < 5; i++, ch++){for (j = 0; j < 5 - i; j++){printf(" ");//控制空格输出}for (j = 1; j < 2 * i; j++)//条件j < 2 * i{printf("%c", ch

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

英语每日一段 195

Promising economic indicators won’t instantly reverse the lingering impact of hard times for millions of families, workplace culture expert Jessica Kriegel said. “Perception and reality are sometimes

GitHub每日最火火火项目(9.7)

项目名称:polarsource / polar 项目介绍:polar 是一个开源的项目,它是 Lemon Squeezy 的替代方案,具有更优惠的价格。该项目旨在让开发者能够凭借自己的热情进行编码并获得报酬。通过使用 polar,开发者可以更轻松地实现自己的创意和项目,并从中获得收益。 项目地址:https://github.com/polarsource/polar项目名称:psf / bla

【每日一题】LeetCode 2379.得到K个黑块的最少涂色次数(字符串、滑动窗口)

【每日一题】LeetCode 2379.得到K个黑块的最少涂色次数(字符串、滑动窗口) 题目描述 给定一个字符串 blocks,其中每个字符代表一个颜色块,可以是 ‘W’(白色)或 ‘B’(黑色)。你需要找到一个至少包含 k 个连续黑色块的子串。每次操作可以将一个白色块变成黑色块。你的任务是找到至少出现一次连续 k 个黑色块的最少操作次数。 和该题目类似:【每日一题】LeetCode 202