单点时限: 2.0 sec
内存限制: 256 MB
kblack 吃鸡成瘾。为此他决定逃课吃鸡!
但是学校有规定,旷课到一定次数,是不给予期末考的资格的。
因此 kblack 决定每门课最多逃两次。
现在告诉你,一个学期有 n 节课程,第 i 节课的科目是 si,时间为 ti。
你需要告诉 kblack 这个学期他逃课吃鸡的最大时间是多少。
输入格式
第一行给出一个整数 n (1≤n≤10 000),为该学期课程节数。
接下来 n 行,第 i+1 行 给出第 i 节课的科目 si 和时间 ti,中间用空格隔开。si 由小写字母组成,1≤|si|≤10,1≤ti≤10 000。若 si=sj,则认为第 i 节课和第 j 节课是同一门课。
输出格式
输出 kblack 该学期逃课吃鸡的最大时间。
样例
input
7
english 2
english 1
math 3
english 3
cook 5
eatchicken 10
cook 5
output
28
/*
思路:用map记录课程索引,第一个出现标记,以后索引均是相同。
*/
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n;
cin>>n;
map<string,int>m;
vector<int>v[n+1];
int index=1;
int ans=0;
for(int i = 0; i < n; i++) {
string s;
int t;
cin>>s>>t;
if(m[s]==0) {
m[s]=index;
v[index++].push_back(t);
} else
v[m[s]].push_back(t);
}
for(int i = 1; i < index; i++) {
sort(v[i].begin(),v[i].end());
}
for(int i = 1; i < index; i++)
{
ans+=v[i][v[i].size()-1];
if(v[i].size()>1)
ans+=v[i][v[i].size()-2];
}
cout<<ans;
return 0;
}