L2-027 名人堂与代金券(模拟

题目链接

解题思路:

其实这个题一点也不难  就是最后输出名次那里 我写的有点复杂  我又在结构体中加了一个变量去记录  写麻烦了

原始代码:

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e4+10;
struct node
{
	int x;
	string s;
	int d;
}a[maxn];
bool cmp(node a,node b)
{
	if(a.x==b.x)
	   return a.s<b.s;
	return a.x>b.x;
}
int main()
{
	int n,g,k;
	int i,j;
	int ans=0;
	int sum=0;
	cin>>n>>g>>k;
	for(i=1;i<=n;i++)
	{
		cin>>a[i].s;
		cin>>a[i].x;
		if(a[i].x>=60&&a[i].x<g)
		  ans+=20;
		if(a[i].x>=g&&a[i].x<=100)
		  ans+=50;
	}
	sort(a+1,a+n+1,cmp);
	cout<<ans<<endl;
	a[1].d=1;
	cout<<"1 "<<a[1].s<<" "<<a[1].x<<endl;
	for(i=2;i<=n;i++)
	{
		if(a[i].x==a[i-1].x)
			a[i].d=a[i-1].d;
		else
		  a[i].d=i;
		if(a[i].d>k)
		  break;
		cout<<a[i].d<<" "<<a[i].s<<" "<<a[i].x<<endl;
		
	}
	return 0;
}

修改后的:

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e4+10;
struct node
{
	int x;
	string s;
}a[maxn];
bool cmp(node a,node b)
{
	if(a.x==b.x)
	   return a.s<b.s;
	return a.x>b.x;
}
int main()
{
	int n,g,k;
	int i,j;
	int ans=0;
	int sum=0;
	cin>>n>>g>>k;
	for(i=1;i<=n;i++)
	{
		cin>>a[i].s;
		cin>>a[i].x;
		if(a[i].x>=60&&a[i].x<g)
		  ans+=20;
		if(a[i].x>=g&&a[i].x<=100)
		  ans+=50;
	}
	sort(a+1,a+n+1,cmp);
	cout<<ans<<endl;
	j=1;
	for(i=1;i<=n;i++)
	{
		if(a[i].x!=a[i-1].x)
		  j=i;
		if(j>k)
		  break;
		cout<<j<<" "<<a[i].s<<" "<<a[i].x<<endl;
		
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43819762/article/details/109783808