题目:
- ###本题考察map和枚举
#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
int main(){int n,m;cin>>n>>m;for(int i=1;i<=m*n;++i){int x;cin>>x;mp[x]++;}for(const auto & [x,y] : mp){if(2*y>=n*m/2){cout<<x<<'\n';}}return 0;
}
整体思路:
- 先确定枚举解空间为矩阵中出现的所有数字
- 由于数字与出现次数间有关联,所以使用map<int,int>(数字,该数字的出现次数)记录
- 最后遍历该数字出现次数,判断是否超过了矩阵中所有数的一半(即n*m/2)将之对应的数字输出
注:
- 超过一半的数只可能有一个数或者没有
- [x:y]提取方法是在新版本中的写法,老版本使用pair,循环中的x用first替换,y用second替换,在前面用宏定义#define x first这种方式