题目链接: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;
	}
}