樱花再见
提交文件: sakura.cpp
输入文件: sakura.in
输出文件: sakura.out
时间空间限制: 1s, 512MB
题目描述
毕业季,除了看学长学姐们穿着西装、礼服、漂亮裙子拍毕业照,跟老师朋友说笑告别,一起在纪念册
上留言,留下最后一份美好的回忆,没毕业的低年级小朋友还要关注一下自己的期末考试成绩。
小虾笼的班上共有 n 个学生,她共有 k 科考试,每一科老师打分是 0 到 100 之间的任意实数。成绩一科
一科地出,第 i 天会出第 i 科的成绩,小虾笼会知道她这一科在班上排名 ri。排名 r 意味着有 r 1 个同学
分数严格大于她的分数,同分的同学会有相同的排名。
尽管这是个不好的习惯,但小虾笼总是喜欢预测自己的最终排名,对于所有 1 ≤ i ≤ k,你要回答她前 i
科成绩的总和的排名最好和最坏分别是多少
输入格式
第一行两个正整数 n, k,表示学生数、考试科数。
第二行 k 个正整数 r1, · · · , rk,表示每一科的排名。
输出格式
共 k 行,每行两个正整数,第 i 行的两个整数分别表示前 i 科成绩总和的最好排名、最坏排名。
样例数据
输入
6 2
3 5
输出
3 3
2 6
样例解释
出第 1 科成绩之后,因为只有 1 科成绩,所以总和的排名等于这一科的排名,都是 3;
出第 2 科成绩之后,可使小虾笼排名为 2 的一种成绩是

可使小虾笼排名为 6 的一种成绩是

不存在使得小虾笼排名为 1 的成绩。
解题思路
这题主要是看思路,代码难度并不复杂。
我们先考虑最优排名,我们假设比我们高的人都是一百分,而我们则是无限接近于一百分,比我们低的都是零分,而比我们排名低过的人永远不可能超过我们。那我们就把比我们排名高过的人数累加起来,如果比我们高的人数没有超过总人数,我们就输出总人数减去比我们高的人数,就是最优排名,如果超过了总人数,就说明我们是第一名。那最劣排名也是一样的思路,假设比我们高的人都是一百分,比我们低的人都是零分,而我们则是无限接近于0分,比我们排名高过的人我们就永远无法比他们高。那我们就把比我们排名高过的人数累加起来,如果超过了总人数,我们就是最后一名,否则就输出比我们高过的人数,就是我们的最劣排名。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
int n,k,r,zuiyou=0,zuilie=0;
cin>>n>>k;
for(int i=1;i<=k;i++)
{
scanf("%d",&r);
zuiyou+=n-r;//累加比我们低过的人数
if(n-zuiyou<0) cout<<1<<' ';
else cout<<n-zuiyou<<' ';
zuilie+=r;//累加比我们高过的人数
if(zuilie>n) cout<<n<<endl;
else cout<<zuilie<<endl;
}
return 0;
}
在毕业季,小虾笼要预测自己的期末考试成绩排名。已知每科成绩排名,求前i科成绩总和的最好和最坏排名。通过分析排名和成绩,确定最优和最劣排名策略。
1110

被折叠的 条评论
为什么被折叠?



