POJ 2535 Very Simple Problem(내 물문제 가는 길--오답)

Very Simple Problem
Time Limit: 2000MS
 
Memory Limit: 65536K
Total Submissions: 3284
 
Accepted: 1232
Description
During a preparation of programming contest, its jury is usually faced with many difficult tasks. One of them is to select a problem simple enough to most, if not all, contestants to solve. 
The difficulty here lies in diverse meanings of the term "simple"amongst the jury members. So, the jury uses the following procedure to reach a consensus: each member weights each proposed problem with a positive integer "complexity rating"(not necessarily different for different problems). The jury member calls "simplest"those problems that he gave the minimum complexity rating, and "hardest"those problems that he gave the maximum complexity rating. 
The ratings received from all jury members are then compared, and a problem is declared as "very simple", if it was called as "simplest"by more than a half of the jury, and was called as "hardest"by nobody.
Input
The first line of input file contains integers N and P, the number of jury members and the number of problems. The following N lines contain P integers in range from 0 to 1000 each - the complexity ranks. 1 <= N, P <= 100
Output
Output file must contain an ordered list of problems called as "very simple", separated by spaces. If there are no such problems, output must contain a single integer 0 (zero).
Sample Input
4 4
1 1 1 2
5 900 21 40
10 10 9 10
3 4 3 5

Sample Output
3

Source
Northeastern Europe 2002, Far-Eastern Subregion
N개의 심사위원, P문제, 각 심사위원은 매 문제에 대해 평점을 한다.단일 심사위원에게 있어서 만약에 그의 평점 중의 최고점 제목이 이 심사위원이 인정하는'가장 어려운 제목'으로 간주된다면, 그의 평점 중의 최저점 제목은 이 심사위원이 인정하는'가장 간단한 제목'으로 간주된다.매 문제에 대해 심사위원이'가장 어려운 제목'으로 평가하지 않고 과반수가 넘는 심사위원이'가장 간단한 제목'으로 평가하지 않으면 이는'매우 간단한 제목'으로 여겨질 수 있다.이제'매우 간단한 제목'의 제목 번호를 출력해 주십시오. (이것은 은밀한 정보입니다. 심사위원이 제목에 대한 평가 순서에 따라 결정됩니다. 제목 번호는 1부터입니다.) 그리고 빈칸으로 간격을 두십시오.
이 문제는 제목을 오랫동안 보았습니다. 처음에 제목을 잘못 보았기 때문에 Description은 이해했습니다. 그러나 Input와 Output의 설명이 잘 보이지 않아서 예시를 계속 이해하지 못했습니다. Description을 여러 번 보았지만 Input와 Output의 내용을 자세히 연구하지 못해 두 시간 동안 저를 괴롭혔습니다(T_T).
참고 사항:
1) 문제를 자세히 보면 Description, Input, Output뿐만 아니라 모두 자세히 보아야 한다.
코드(1AC):
#include <cstdio>
#include <cstdlib>
#include <cstring>

int N, P;
int arr[110];
int easy[110];
int hard[110];

int main(void){
    int i, j;
    int tmp, flag;
    int min, max;

    while (scanf("%d%d", &N, &P) != EOF){
        memset(easy, 0, sizeof(easy));
        memset(hard, 0, sizeof(hard));
        for (i = 0; i < N; i++){
            min = 10000;
            max = -1;
            for (j = 0; j < P; j++){
                scanf("%d", &arr[j]);
                if (min > arr[j]){
                    min = arr[j];
                }
                if (max < arr[j]){
                    max = arr[j];
                }
            }
            for (j = 0; j < P; j++){
                if (arr[j] == min){
                    easy[j]++;
                }
                if (arr[j] == max && !hard[j]){
                    hard[j] = 1;
                }
            }
        }
       /* for (i = 0; i < P; i++){
            printf("%d ", hard[i]);
        }
        printf("
"); for (i = 0; i < P; i++){ printf("%d ", easy[i]); } printf("
");*/ flag = 0; for (i = 0; i < P; i++){ if (easy[i] > N / 2 && hard[i] == 0){ if (flag){ printf(" "); } printf("%d", i + 1); flag = 1; } } if (flag == 0){ printf("0
"); } else{ printf("
"); } } return 0; }

좋은 웹페이지 즐겨찾기