悬赏,ABC C题,WA 求助
  • 板块学术版
  • 楼主GDSYZX
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/8/19 22:49
  • 上次更新2023/11/3 02:33:33
查看原帖
悬赏,ABC C题,WA 求助
382825
GDSYZX楼主2023/8/19 22:49

思路:

  1. 开 nn 个 multiset,记录每种口味的美味值。

  2. 开 11 个 set,记录每个口味的美味值的最大值。

  3. 通过 set 的排序特点,取出两个不同口味的美味值得最大值进行计算,更新最大值。

  4. 遍历每个口味,取出每个口味的最大的两个美味值进行计算,更新最大值。

  5. 输出。

代码:

#include <iostream>
#include <iomanip> 
#include <cmath> 
#include <string>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <set>
#define endl '\n'
#define int long long
#define pint pair<long long, long long>
#define IL inline
using namespace std;
const int N = 3e5 + 10;
const int INF = 0x3f3f3f3f;

set <pint> s;
multiset <int> p[N];
pint a[N];

signed main() 
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		int f, q;
		cin >> f >> q;
		a[i] = {f, q};
		p[f].emplace(q);
	}
	for(int i = 1;i <= n;i++)
	{
		auto q = p[a[i].first].end();
		q--;
		s.insert({a[i].first, *q});
	}
	auto e = s.end();
	e--;
	int ans = 0;
	ans += (*e).second;
	if(s.size() == 1)
	{
		ans = 0;
	}
	else
	{
		e--;
		ans += (*e).second; 
	}
	for(auto i = s.begin();i != s.end();i++)
	{
		int qwq = (*i).first;
		auto g = p[qwq].end();
		g--;
		if(p[qwq].size() == 1) continue;
		int ux = (*g);
		g--;
		int uy = (*g);
		ans = max(ans, ux + uy / 2);
	}
	cout << ans << endl;
    return 0;
}
2023/8/19 22:49
加载中...