HDU-1031- Design T-Shirt(c++ && 简单模拟)

Design T-Shirt

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 6657    Accepted Submission(s): 3125

Problem Description

Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA found that he was trapped by all kinds of suggestions from everyone on the board. It is indeed a mission-impossible to have everybody perfectly satisfied. So he took a poll
to collect people‘s opinions. Here are what he obtained: N people voted for M design elements (such as the ACM-ICPC logo, big names in computer science, well-known graphs, etc.). Everyone assigned each element a number of satisfaction. However, XKA can only
put K (<=M) elements into his design. He needs you to pick for him the K elements such that the total number of satisfaction is maximized.

Input

The input consists of multiple test cases. For each case, the first line contains three positive integers N, M and K where N is the number of people, M is the number of design elements, and K is the number of elements XKA will put into his design. Then N lines
follow, each contains M numbers. The j-th number in the i-th line represents the i-th person‘s satisfaction on the j-th element.

Output

For each test case, print in one line the indices of the K elements you would suggest XKA to take into consideration so that the total number of satisfaction is maximized. If there are more than one solutions, you must output the one with minimal indices. The
indices start from 1 and must be printed in non-increasing order. There must be exactly one space between two adjacent indices, and no extra space at the end of the line.

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

Author

CHEN, Yue

Source

CYJJ‘s Funny Contest #1, Killing in Seconds

Recommend

Ignatius.L   |   We have carefully selected several similar problems for you:  1036 1032 1033 1037 1039

多谢傅联洲同学分享的思路,你的算法实在是精妙无比......

好了说一下题目的大意!(分数不一定是整型)

大概意思就是XKA打算设计一个T-Shirt,征集大众对这个T-Shirt的满意度!

首先输入三个数:N,M,K(N表示打分的人数,M表示分数的总数量,K表示XKA所要选用的)

XKA将会选用分值最高的前K个元素,如果分值相同则选择靠前的元素!

另外要注意的输出格式,不能有多余的空格。

思路:1.比较每一列的和的大小。

2.记录每次比较后和最大的列数。

3.安大小输出列数,若列数相同,输出靠前的。

4.格式。

#include<iostream>
#include<cstdio>
#include<cstring>
#define MAX 1000
double a[300][300],b[300];
using namespace std;
int main()
{
    int m,n,k,i,j;
    while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    {
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
                scanf("%lf",&a[i][j]);           //输入每个人打的分数
        for(j=0;j<m;j++)
        {
            double sum=0;
            for(i=0;i<n;i++)
            {
                sum+=a[i][j];                    //求出每列的分数和,每列对应一个题目
            }
            b[j]=sum;
        }
        int f[MAX];
        memset(f,0,sizeof(f));
        for(i=0;i<k;i++)
        {
            double max=b[0];
            int flag = i;                        //记录最大分数和的下标
            for(j=m-1;j>=0;j--)
            {
                if(max-b[j]<10e-6)               //比较求出最大分数和的值,标记下来
                {
                    max=b[j];
                    flag=j;
                }
            }
            f[flag+1]=1;
            b[flag]=0;                           //将最大的数去除
        }
        int p=1;
        for(i=MAX-1;i>=0;i--)
        {
            if(f[i])
            {
                if(p)p=0;
                else
                    printf(" ");                 //格式化输出
                printf("%d",i);
            }
        }
        printf("\n");
    }
    return 0;
}
时间: 2024-09-29 02:58:31

HDU-1031- Design T-Shirt(c++ && 简单模拟)的相关文章

HDU 1031 Design T-Shirt 选前k大

相当于给出一组数列,然后选择前K大的数的算法. 本题没有给出详细的数据,故此就使用动态分配空间的方法了. 而这种题最好的算法就是使用快排思想,期望时间效率就是O(n)了. 最基本入门解决这种题的算法是直接排序了.那就成了水代码了.用上快排的思想才能体现出水平. 不过这种快排实在考的太多了,建议一定要掌握. 每次做这个算法的题目总会要调试一定时间的,每次都出现奇葩的错误.看来还是不够细心. 做题的时候一定要排除杂念,有干扰,后果很严重,会花长很多时间. 靖空间做题,一定要静,达到一种禅的境界.说禅

杭电 HDU 1031 Design T-Shirt

Design T-Shirt Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6527    Accepted Submission(s): 3061 Problem Description Soon after he decided to design a T-shirt for our Algorithm Board on Free

HDU 1031.Design T-Shirt【结构体二次排序】【8月21】

Design T-Shirt Problem Description Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA found that he was trapped by all kinds of suggestions from everyone on the board. It is indeed a mission-impossible to have eve

HDU 1031 Design T-Shirt

题意:讲的是XKA要设计T-Shirt,征集大众对各元素的满意度.分别输入3个整数,分别给N.M.K,其中N代表参与打分的人数,M代表元素总数量,K代表XKA所要选用的元素数量.XKA将选用分值较高的前K个元素,若分值相同则选择索引小的的元素.思路:记录每个M的总分数和索引,用结构体存起来,两次排序就够了 另外要注意的输出格式,不能有多余的空格. 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4

HDU 1048 What Is Your Grade? (简单模拟)

 What Is Your Grade? Problem Description "Point, point, life of student!" This is a ballad(歌谣)well known in colleges, and you must care about your score in this exam too. How many points can you get? Now, I told you the rules which are used in

HDU 4891 简单模拟

The Great Pan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1035    Accepted Submission(s): 355 Problem Description As a programming contest addict, Waybl is always happy to take part in vario

HDU 4772 Zhuge Liang&#39;s Password (简单模拟题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4772 题面: Zhuge Liang's Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1404    Accepted Submission(s): 926 Problem Description In the anc

hdu 1800 Flying to the Mars(简单模拟,string,字符串)

题目 又来了string的基本用法 //less than 30 digits //等级长度甚至是超过了int64,所以要用字符串来模拟,然后注意去掉前导零 //最多重复的个数就是答案 //关于string的修改增加的用法 #include <cstdio> #include<iostream> #include <cstring> #include <algorithm> #include<string> using namespace std

HDU ACM 1057 A New Growth Industry 简单模拟

题意:给一个天数N,求20*20方阵内细菌的变化情况.每次变化加上一个d[k],d数组有给定的16个数.k是某个格子它本身加上它上下左右的四个数. 简单模拟题. 分析: #include<iostream> using namespace std; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; char den[]=".!X#"; int D[16]; int map[20][20],tmp[20][20]; void Fun() {

(hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数&lt;=3,输出剩下的人 )

题目: 士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56 Accepted Submission(s): 37   Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三