2023年码题杯初赛 小码哥的艰难选择 题型:模拟

113 阅读1分钟

码题集OJ-小码哥的艰难选择 (matiji.net)

思想

我刚开始是这样写的,只能过3个数据:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
const int N = 110;
struct Point
{
	int id;
	string name;
	int cj;
}a[N];

bool cmp(struct Point a,struct Point b)
{
	if (a.cj == b.cj)return a.id < b.id;
	return a.cj < b.cj;
}
signed main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		a[i].cj = 1000;
	}
	for (int i = 1; i <= n; i++)
	{
		int num;
		cin >> a[i].name >> num;
		a[i].id = i;
		a[i].cj += num;
	}

	sort(a,a+n,cmp);


	cout << a[1].name << endl<<a[1].cj;
	return 0;
}

image.png

这样写可以全部过:

#include<bits/stdc++.h>
using namespace std;

int n; // 存储输入的数量
map<string, int> mp; // 用于存储姓名和数量的映射

// 比较函数,用于排序
bool cmp(pair<string, int>a, pair<string, int>b) {
    return a.second < b.second; // 按数量从小到大排序
}

int main() {
    cin >> n; // 输入数量

    for (int i = 0; i < n; i++) {
        string name;
        int num;
        cin >> name >> num; // 输入姓名和数量
        mp[name] += num; // 累加数量到对应的姓名
    }

    // 遍历unordered_map,将每个值增加1000
    for (auto it = mp.begin(); it != mp.end(); ++it) {
        it->second += 1000;
    }

    // 将unordered_map的内容复制到vector中
    vector<pair<string, int>> v(mp.begin(), mp.end());
    // 使用比较函数排序vector
    sort(v.begin(), v.end(), cmp);

    // 输出排序后的第一个元素的姓名和数量
    cout << v[0].first << endl << v[0].second << endl;

    return 0;
}

image.png