FOJ 1350 Very Simple Problem

本题的思想是

1.输入完毕一组专家的数据后。将他们排序,就知道最大和最小值。

2.把最大值在标记数组中把该题目标记为-1,最小值把该题目(不为-1)的++

循环以上步骤直到所有专家数据读入完毕。

3.处理标记数组,判断各个题目的标记值,若大于等于专家数目除以2,则输出。

另外需要注意格式问题,此题容易出现格式错误。

 

代码如下。

#include <iostream> #include <algorithm> #include <vector> #include <string.h> using namespace std; struct problem { int pro_id; int weight; }; bool my_sort(problem a, problem b) { return a.weight<b.weight; } int main() { int n,p; int pro_arr[100]; int pro_ok[100]; int weight; int i,j,k; int chu2; int count; vector<problem> t_vec; problem pro; while (scanf("%d%d", &n,&p) != EOF) { memset(pro_arr, 0, sizeof(pro_arr)); for (i = 0;i<n;i++) { for (j=0;j<p;j++) { scanf("%d", &weight); pro.weight = weight; pro.pro_id = j; t_vec.push_back(pro); } sort(t_vec.begin(), t_vec.end(), my_sort); for (j = 0;j<p;j++) { if (t_vec[j].weight == t_vec[0].weight) { if (pro_arr[t_vec[j].pro_id] != -1) pro_arr[t_vec[j].pro_id]++; } else { break; } } for (j = p-1;j>=0;j--) { if (t_vec[j].weight == t_vec[p-1].weight) pro_arr[t_vec[j].pro_id] = -1; else break; } t_vec.clear(); } if (n%2 == 0) chu2 = n/2; else chu2 = n/2+1; count = 0; k = 0; for (j=0;j<p;j++) { if (pro_arr[j] >= chu2) { pro_ok[k] = j+1; k++; count++; } } if (count == 0) { printf("0/n"); } else { for (j=0;j<k-1;j++) printf("%d ", pro_ok[j]); printf("%d/n", pro_ok[k-1]); } } return 0; }

 

你可能感兴趣的:(ini)