POJ 2153 Rank List (map映射)

时间:2022-02-06 10:43:50

水题,竟然花了那么多时间。。。主要是不知道为什么,明明在本机上编译过去了,但是用c++提交却编译错误。。。最后用g++提交AC

题意:给出n个学生的名字,然后给出m个测验。
  每个测验给出n个学生的分数。
  当给出第i次测验的成绩,求Li Ming在所有学生中,前i次成绩总和的排名(若分数相同,则Li Ming排在第一个)

  开始没仔细看题,以为对于每次测验,只要给出Li Ming在此次测验中的排名。
  后来才知道,原来题目中有这么一句话:
  In the i-th line, you should give the rank of Li Ming after the i-th exam.
  The rank is decided by the total scores。。。

思路:用map建立映射关系,最后求名次的时候for循环一遍即可。

#include <iostream>
#include <stdio.h>
#include <map>
#include <string.h>
#include <algorithm> const int maxn=;
using namespace std;
int n,m;
int score[maxn];
map<string,int> stu; //建立学生名字到编号的映射 int main()
{
char str[];
int fenshu;
cin>>n;
getchar();
for(int i=;i<=n;i++){
gets(str); //用gets读取名字
stu[str]=i;
}
cin>>m;
memset(score,,sizeof(score));
while(m--){
for(int i=;i<=n;i++){
scanf("%d",&fenshu);
getchar(); //先读取分数后面的一个空格
gets(str);
score[stu[str]]+=fenshu;
}
int ranks=; //李明的排名
for(int i=;i<=n;i++)
if(score[i]>score[stu["Li Ming"]])
ranks++;
cout<<ranks<<endl;
}
return ;
}