题意:一共n个学生,每人5门课程代号(100~499)的组合,这些课程组合的重复次数为受欢迎度。求选受欢迎度最大的课程的学生人数?
思路:将每个学生的五门选课从小到大进行排序,拼成一个15位数,开一个long long类型的数来储存,然后用map容器对该数出现的次数进行累加。
#include<bits/stdc++.h> using namespace std; typedef long long ll; int z[5]; int main() { int n; while(cin>>n&&n) { int maxx=0,sum=0; map<ll,int> Map; for(int i=0;i<n;i++) { for(int j=0;j<5;j++) cin>>z[j]; sort(z,z+5); ll key=0; for(int k=0;k<5;k++) { key*=1000; key+=z[k]; } maxx=max(Map[key]+=1,maxx); } for(map<ll,int>::iterator it=Map.begin();it!=Map.end();it++) { if(it->second==maxx) sum+=maxx; } cout<<sum<<endl; } return 0; }