题目链接
解题思路:
其实这个题一点也不难 就是最后输出名次那里 我写的有点复杂 我又在结构体中加了一个变量去记录 写麻烦了
原始代码:
#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;
}