题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1031
排序。
没有给N,M的范围,所以用了vector。不用将所有输入数据存下来,只需计算同一个编号的design的总得分。对总得分排序,题目规定得分时,再按design的编号排序。取前K个design。再对着K个design按编号由大到小排序。
#include <algorithm> #include <iostream> #include <vector> using namespace std; class vote { public: int id; double score; }; vector<vote> ans; vector<int> finalAns; int cmp1(vote a,vote b) { if (a.score != b.score) return a.score > b.score; else return a.id < b.id; } int cmp2(int a,int b) { return a > b; } int main () { int n,m,k; while (scanf("%d%d%d",&n,&m,&k) != -1) { vote aVote; aVote.score = 0.0; ans.clear(); for (int i = 1;i <= m;i ++) { aVote.id = i; ans.push_back(aVote); } //处理n个学生的选择 for (int i = 0;i < n;i ++) { //每个学生有m个选择 for (int j = 1;j <= m;j ++) { double aScore; scanf("%lf",&aScore); ans[j - 1].score += aScore; } } sort(ans.begin(),ans.end(),cmp1); finalAns.clear(); for (int i = 0;i < k;i ++) { finalAns.push_back( ans[i].id ); } sort(finalAns.begin(),finalAns.end(),cmp2); printf("%d",finalAns[0]); for (int i = 1;i < k;i ++) printf(" %d",finalAns[i]); printf("\n"); } return 0; }