题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1031
题意:有n个人给设计中的m个元素评价满意度,然后设计者会找出其中k各元素加到它的设计中,输出前k个元素的序号,并且用非递增的顺序输出。
思路:把各个元素的综合满意度进行排序,找出前k个满意度最高的元素,然后将它们的序号进行排序,然后从大到小输出。
My DaiMa:
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct person
{
double a;
int flag;//flag用来存元素序号
}s[103];
bool cmp1(person p1, person p2)
{
return p1.a > p2.a;//按结构体中满意度元素进行排序
}
bool cmp2(person p1, person p2)
{
return p1.flag > p2.flag;//按结构体中序号元素进行排序
}
int main()
{
int n, m, t;
double b;
while (cin >> n >> m >> t)
{
for (int i = 0; i < m; i++)
{
s[i].a = 0;
s[i].flag = i + 1;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> b;
s[j].a += b;//求出每个元素的综合满意度
}
}
sort(s, s + m, cmp1);//先把它们按满意度排序
sort(s, s + t, cmp2);//再把其前k个的序号排一下序
for (int i = 0; i < t - 1; i++)
cout << s[i].flag << " ";
cout << s[t - 1].flag << endl;
}
}