给出n条比赛记录,每条记录中是比赛者name_i和该轮积分val_i,比赛结束时个人积分之和最大值记为m。若只有一个人个人积分之和为m则此人获胜;若存在多个个人积分之和为m,则这些个人积分之和为
m的人中第一个在比赛过程中达到或超过
m分的人获胜
。
初始积分为0分,比赛结束至少有一人总积分为正,输出获胜者的名字和最终积分。
第一行,一个整数n,表示记录条数。
接下来n行,每行有单个空格分隔的两个数据name_i和val_i表示第i轮比赛者姓名和得分。
对于100%的数据:
1 \le name_i.size() \le 100 ,且名字只包含大小写英文字母。
1 \le n \le 1000 。
-1000 \le val_i \le 1000 。
一行,由单个空格分隔的两个数据,分别表示获胜者的名字和总积分,不得有多于的前导或后续空格。
3 mike 3 andrew 5 mike 2
andrew 5
8 d 13 c 12 a 1 a 1 a 1 b 10 d -12 a 9
c 12
5 a 4 b 6 a 2 b -2 b 2
b 6
知识支持:
map可以把“键、值”结合在一起,可以简单的理解为数组的元素可以是任何东西但下标只能是数字,map的元素和下标都可以是任何东西,例如:
map<string,int> mp; //创建一个键类型string,值类型int的map
mp[name]=mp[name]+v; //读和写,name为键(key,关键字),用mp[name]这样的下标方式访问时即使map中不存在name这个键也会自动创建一个,其值(int)默认值为0。
//遍历时与数组不同,遍历map需要使用迭代器(iterator)
//迭代器“引用”了“键值对”,即当前的一对string和int,所以访问迭代器的具体内容用->而不是.
//it->first表示当前的键,即"下标"string
//it->second表示当前的位置的值,即"下标"string对应的int数值
for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++){
if(it->second>mv)mv=it->second; //second表示键值对中的值,即int
}
此外,map还支持另外一些常用操作:
查找:mp.find("key") //查找"key"关键字是否存在于map,存在返回指向这个键值对的迭代器,不存在返回mp.end()
查找:mp.count("key") //查找"key"关键字对应的元素的个数。其返回值为size_t类型,只可能是0或1。
删除:mp.erase("key") //删除"key"关键字的元素,返回删除的个数,只能是0或1
删除:mp.erase(it) //删除迭代器it所指向的元素
删除:mp.erase(mp.begin(),mp.end())//删除mp的begin()迭代器到end()迭代器之间的元素,不包含end()迭代器。这样写相当于清空mp。
清空:mp.clear() //清空mp,删除其中所有的键值对。
元素个数:mp.size() //存在多少键值对
时间限制 | 100 毫秒 |
内存限制 | 128 MB |