当前位置: 代码迷 >> 综合 >> poj 2535 Very Simple Problem
  详细解决方案

poj 2535 Very Simple Problem

热度:45   发布时间:2024-01-11 16:36:38.0

开始题意搞错了,一直以为是最简单的问题才行。。。

后来看discuss才发现只要简单就可以了,里面看到一个很不错的题意解释。。。

问题: n个人给p道题打分,一道题是最容易题的条件:该题被评为最简单的次数要过半,而且该题没有被任何评委评为最难。方法: 可设置3个数组,数组A用来读入数据,数组B纪录对应的题目是否被
打成“最难”的了, 数组C纪录该道题被评委打成“最简单”的次数.当然
这个“最难”和“最简单”只是针对这个评委给这P道题目的打分了。所以,每次读入一行时,判断最难的题和最简的题(即该评委给分给的最高和最低的),
然后将对应的B置为1,对应的C增加1。最后: 再遍历所有题目,“没有被标记为最难的以及被标记为最简单的数目过半的题”就是简单题。

思路也很清晰。

#include <stdio.h>
#include <string.h>int problemRank[102];
int isHardest[102];int main()
{int N,P;int minNum,maxNum;scanf("%d%d",&N,&P);int i,j;int nowProblemScore[102];memset(problemRank,0,sizeof(problemRank));memset(isHardest,0,sizeof(isHardest));for(i=0;i<N;i++){minNum=0x7fffffff;maxNum=-1;for(j=0;j<P;j++){scanf("%d",&nowProblemScore[j]);if(nowProblemScore[j]<minNum)minNum=nowProblemScore[j];if(nowProblemScore[j]>maxNum)maxNum=nowProblemScore[j];}//printf("minNum == %d\n",minNum);  //okfor(j=0;j<P;j++){if(minNum == nowProblemScore[j])problemRank[j]++;if(maxNum == nowProblemScore[j])isHardest[j]=1;}}/*for(j=0;j<P;j++)printf("%d ",problemRank[j]);printf("end\n");*/for(i=0;i<P;i++)if(isHardest[i]==0 && problemRank[i]>N/2){printf("%d",i+1);break;}if (i == P){printf("0\n");return 0;}//最后的输出for(j=i+1;j<P;j++)if(isHardest[j]==0 && problemRank[j]>N/2)printf(" %d",j+1);printf("\n");return 0;
}




  相关解决方案