PAT 1048 水题 注意c++的foreach
水题。注意c++的foreach在auto指针下遍历时,每次取出容器中的一个元素加入当前副本中,因此不能直接用当前元素进行更新,如果用auto& 指针则可以修改容器中的元素。
代码:
#include <iostream>
#include <map>
using namespace std;
int N, M;
map<int, int> m;
int main()
{
cin >> N >> M;
for (int i = 0; i < N; i++) {
int tmp;
cin >> tmp;
m[tmp]++;
}
bool flg = true;
// for (auto i : m) {
// if (i.first > M - i.first) {
// break;
// }
// m[i.first]--;// 不要写成i.second--,这个是一个容器副本,无法修改
// //cout<<m[7]<<endl;
// if (m[M - i.first]) {
// cout << i.first << " " << M - i.first << endl;
// flg = false;
// break;
// }
// }
for (auto& i : m) {
if (i.first > M - i.first) {
break;
}
i.second--;
if (m[M - i.first]) {
cout << i.first << " " << M - i.first << endl;
flg = false;
break;
}
}
if (flg) {
cout << "No Solution" << endl;
}
}
46ms