1. 程式人生 > >【1031 HDU】Design T-Shirt

【1031 HDU】Design T-Shirt

題目連結: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;
	}
}