AC
思路:使用位运算,把每个芯片的测试结果变为整数,同时使用 map 统计次数,然后遍历 map 得到出现次数(值)最多的整数(关键字)后,最后遍历芯片数组,若与这个整数相同就输出芯片编号。
#include <iostream>
#include <map>
#define N 21
using namespace std;
int chip[N];
int main() {
int n;
cin >> n;
map<int, int> ma;
for (int i = 1; i <= n; ++i) {
int num = 0;
for (int j = 0; j < n; ++j) { //error: i < n
int op;
cin >> op;
num = (num << 1) + op;
}
chip[i] = num;
++ma[num];
}
//得到出现次数最多的迭代器
map<int, int>::iterator ite_max_value = ma.begin();
for (map<int, int>::iterator ite = ma.begin(); ite != ma.end(); ++ite)
if (ite->second > ite_max_value->second) ite_max_value = ite;
for (int i = 1; i <= n; ++i)
if (chip[i] == ite_max_value->first) cout << i << ' ';
return 0;
}