二分贪心—X

题目:输入n和m,n代表n次比赛,m代表个人成绩,输出出现次数第二多的所有人。

解题思路:定义一个结构体,结构体包含两个数,一个数表示标号,另一个数表示出现的个数,然后结构体数组进行排列,输出出现个数第二多的数即可。

细节处理:用scanf和printf,用cin和cout会超时。

代码:#include<iostream>
#include <stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct A
{ int num;
  int s;
}a[250000];
bool cmp(A a,A b)
{
if(a.s!=b.s)
    return a.s>b.s;
  else return a.num<b.num;
}
int main()
{ int i,j,n,m,b,h;
  while(scanf("%d%d",&n,&m))
  {
      if(n==0&&m==0)
      break;
      A a[250000];
    memset(a,0,sizeof(a));
   for(i=0;i<n;++i)
    for(j=0;j<m;++j)
    {
 scanf("%d",&b);
 a[b].num=b;
 a[b].s++;
    }
    sort(a,a+250000,cmp);


    for(i=1,h=-1;i<m*n;++i)
     { if(h>a[i].s)
        break;
 if(a[i].s!=a[0].s)
      { h=a[i].s;
       printf("%d ",a[i].num);
 }
    }
    printf("\n");
  }
}

感想:写代码的时候要灵活,比如这个题的输入和输出,用scanf和printf可以过,但用cin和cout就不行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值