Design T-Shirt
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6816 Accepted Submission(s): 3201
水题一道
题意: 讲的是XKA要设计T-Shirt,征集大众对各元素的满意度。 分别输入3个整数,分别给N、M、K, 其中N代表参与打分的人数,M代表元素总数量,K代表XKA所要选用的元素数量。 XKA将选用分值较高的前K个元素,若分值相同则选择靠前的元素。 另外要注意的输出格式,不能有多余的空格。 思路:1.输入 2.对ans数组进行最大和升序排序 3.对ans数组的前k个元素基于No升序排列 4.输出格式(最后没有 空格 )
Sample Input
3 6 4
2 2.5 5 1 3 4
5 1 3.5 2 2 2
1 1 1 1 1 10
3 3 2
1 2 3
2 3 1
3 1 2
Sample Output
6 5 3 1
2 1
#include<iostream>
using namespace std;
struct nom
{
int No=0;
double sat=0;
};
int n, m, k;
double **bank;
nom *ans;
int main(void)
{
while (cin >> n >> m >> k)
{
bank = new double*[n];
ans = new nom[m];
for (int i = 0; i < n; i++)
{
bank[i] = new double[m];
for (int j = 0; j < m; j++)
{
cin >> bank[i][j];
ans[j].No = j+1;
ans[j].sat += bank[i][j];
}
}
for (int i = 1; i < m; i++)
for (int j = 0; j < m - i;j++)
{
if (ans[j].sat < ans[j + 1].sat)
{
nom s = ans[j]; ans[j] = ans[j + 1]; ans[j + 1] = s;
}
}
for (int i = 1; i < k; i++)
for (int j = 0; j < k - i; j++)
{
if (ans[j].No < ans[j + 1].No)
{
nom s = ans[j]; ans[j] = ans[j + 1]; ans[j + 1] = s;
}
}
for (int i = 0; i < k; i++)
{
cout << ans[i].No ;
if (i < k - 1)
cout << ' ';
else
cout << endl;
}
}
return 0;
}