分数线划定

> Description
分数线划定
分数线划定
分数线划定
分数线划定


> 解题思路
这道题说实话还挺水的,因为一不小心超时只拿了80分所以就发一下 题目是这样的:按照题目描述的那样算出最少能进面试的人数,但是有同分的就不得不多几个人,同分的人的序号还要从小到大输出。本来多弄了两个数组所以就超时了,后来把它压了一下。


> 代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int k[105]={0},a[105][8900]={0};
//a用来存序号,k用来存分数(为了循环时间更少)
int ans=0,len=0,t,s,n,m;//len是用来存有多少种分数
int main()
{
	scanf("%d%d",&n,&m);
	m=m*3/2;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&s,&t);
		if(a[t][0]==0) k[++len]=t;
		a[t][++a[t][0]]=s;
		//存数
	}
	sort(k+1,k+1+len);
	for(int i=1;i<=len;i++) 
	   sort(a[k[i]]+1,a[k[i]]+1+a[k[i]][0]);//排序
	
	for(int i=len;i>=1;i--)
	{
		ans+=a[k[i]][0];
		if(ans>=m)
		{
			printf("%d %d\n",k[i],ans); break;
		}
	}
	while(ans>0)
	{
		for(int i=1;i<=a[k[len]][0];i++)
		 printf("%d %d\n",a[k[len]][i],k[len]);
		ans-=a[k[len]][0]; len--;
	}
	return 0;
}