111002 - 志愿者选拔

题解bytaotao

#include <bits/stdc++.h>
using namespace std;
struct dp//排名结构体
{
  int name,sc;
};
bool fuck(dp a,dp b)
{
  if(a.sc==b.sc&&a.name>b.name) return a.name>b.name;//成绩相等的情况
  else return a.sc<b.sc;
}

int main()
{
  int n,m;
  cin>>n>>m;
  dp a[n+4];
  for(int i=0; i<n; i++)
  {
    cin>>a[i].name>>a[i].sc;
  }
  sort(a,a+n,fuck);//排序
  int fir=floor(m*3/2);//输出个数
  int cnt=0;
  register int i;//把i存下来
  for(i=n-1; i>=0; i--)
  {
    if(cnt==fir) break;
    if(a[i].sc>=fir) cnt++;
  }
  cnt=0;//重新数个数
  i+=1;
  for(int j=n-1; j>=0; j--)
  {
    if(a[j].sc>=a[i].sc) cnt++;
  }
  cout<<a[i].sc<<' '<<cnt<<'\n';
  for(int j=n-1; j>=0; j--)
  {
    if(a[j].sc>=a[i].sc) cout<<a[j].name<<' '<<a[j].sc<<'\n';
  }
  return 0;
}