`unordered_map` 没有特定的迭代顺序,注释的写法碰巧能过这题。
by ud2_ @ 2023-02-05 21:56:58
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 3e3 + 10;
// 每个数大小不超过 10,but 10 + 10 = 20
const double pi = 3.141593; // double
int p[100];
int main()
{
int s1, s2, s3;
cin >> s1 >> s2 >> s3;
unordered_map<int, int> map;
for (int i = 1; i <= s1; i++) {
for (int j = 1; j <= s2; j++) {
for (int k = 1; k <= s3; k++) {
map[i + j + k] ++;
}
}
}
int t = 0, v = 50;
for (auto iter = map.begin(); iter != map.end(); iter++) {
if (iter->second > t) {
t = iter->second;
v = iter->first;
}
}
// int max = 0;
// int v = 1000000;
// for (auto iter = map.begin(); iter != map.end(); iter++) {
// if (iter->second >= max) {
// v = std::min(v, iter->first);// ❎如果 v = 1, 之后的2,3就更新不上了
// max = iter->second;
// }
// 你的法1 第1个点过不去
// 而且法2 unordered_map 无序,所以当在次数相等时选小的,要找两遍,一遍是不够的
for (auto i: map)
if (i.second == t) v = min(v, i.first);
// 或者使用 set 或数组
// for (int i = 1; i <= s1; i ++)
// for (int j = 1; j <= s2; j ++)
// for (int k = 1; k <= s3; k ++)
// p[i + j + k] ++;
// for (int i = 0; i < 100; i ++)
// if (p[i] > t) {
// t = p[i];
// res = i;
// }
cout << v << "\n";
system("pause");
return 0;
}
```
by Sqj147 @ 2023-06-14 11:09:10