Problem - 2A - Codeforces
wa1
没有搞懂c++的pair的排序规则,之前tmd记错了,是先first,在second
wa2
没有弄清楚,题目需求(最后都是m分的玩家(m分为max),最先出现,大于等于m分的玩家)
todolist
1.最后为m分的玩家
2.最先出现大于等于m分的玩家 && 玩家最后得分为m(最大分数)
wa3
运用一下代码判断是否为m分玩家,导致没有输出
cpp
while(i && sb[i].y == ans) isname[sb[i].x] = 1;
AC
cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ldb;
typedef pair<int, int> pii;
typedef pair<ll, ll> PII;
#define pb emplace_back
//#define int ll
#define all(a) a.begin(),a.end()
#define x first
#define y second
#define ps push_back
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define lc u << 1
#define rc u << 1 | 1
void solve();
const int N = 1e6 + 10;
signed main() {
IOS;
ll t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}
bool cmp(pair<string,ll> a,pair<string,ll> b)
{
return a.y < b.y;
}
void solve() {
map<string,ll> mp,zan_mp;
string s;
ll n,score;
cin >> n;
vector<pair<string,ll>> zan;
for(int i = 1; i <= n; ++ i)
{
cin >> s >> score;
zan.ps({s,score});
mp[s] += score;
}
vector<pair<string,ll>> sb;
for(auto [s,scorex]:mp)
{
sb.ps({s,scorex});
}
sort(all(sb),cmp);
// for(int i = 0; i < sb.size(); ++ i) cout << i << ": " << sb[i].y << endl;
ll f = sb.size() - 1;
ll ans = sb[f].y;
string anss;
map<string,bool> isname;
int i = f;
for(int i = sb.size() - 1; i >= 0; -- i)
{
if(sb[i].y == ans)
isname[sb[i].x] = 1;
else break;
}
for(auto [s,scorex] : zan)
{
zan_mp[s] += scorex;
if(zan_mp[s] >= ans && isname[s])
{
anss = s;break;
}
}
cout << anss << endl;
}