C++ Map操作求助

P2911 [USACO08OCT] Bovine Bones G

`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


|