P1093 [NOIP2007 普及组] 奖学金
sort排序即可
注意cmp的写法
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int id;
int chinese;
int math;
int english;
int count;
}a[305];
int cmp(node& a,node& b)
{
if(a.count!=b.count){return a.count>b.count;}
else if(a.chinese!=b.chinese){return a.chinese>b.chinese;}
return a.id<b.id;
}
int main()
{
int n,i;
int count=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i].chinese;
cin>>a[i].math;
cin>>a[i].english;
a[i].count=a[i].chinese+a[i].math+a[i].english;
a[i].id=i+1;
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
cout<<a[i].id<<" "<<a[i].count<<endl;
if(++count==5)
{
break;
}
}
return 0;
}
P1051 [NOIP2005 提高组] 谁拿了最多奖学金
也是排序即可
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct node
{
string name;
int stu_money;
int id;
}stu[105];
int getm(int n,int m){
if(n>80&&m>=1){
return 8000;}
else{
return 0;}}
int geta(int m,int n)//a
{
if(m>85&&n>80)
{return 4000;}
else{return 0;}
}
int getb(int m)//b
{
if(m>90){return 2000;}
else
{return 0;}
}
int getc1(int m,char n)//c
{
if(m>85&&n=='Y')
{
return 1000;
}else{
return 0;}
}
int getd(int m,char n)//d
{
if(m>80&&n=='Y')
{
return 850;
}else
{
return 0;
}
}
bool cmp(node a,node b)
{
if(a.stu_money!=b.stu_money){
return a.stu_money>b.stu_money;}
else
{
return a.id<b.id;
}
}
int main()
{
int n,i;
string stu_name;
int stu_ALLcount=0;
cin>>n;
for(i=0;i<n;i++)
{
char stu_gan=' ';
char stu_w=' ';
int score=0;
int ju_score=0;
int count=0;
cin>>stu[i].name;
cin>>score;
cin>>ju_score;
cin>>stu_gan;
cin>>stu_w;
cin>>count;
stu[i].id=i;
stu[i].stu_money=getm(score,count)+geta(score,ju_score)+getb(score)+getc1(score,stu_w)+getd(ju_score,stu_gan);
stu_ALLcount+=stu[i].stu_money;
}
sort(stu,stu+n,cmp);
cout<<stu[0].name<<endl;
cout<<stu[0].stu_money<<endl;
cout<<stu_ALLcount<<endl;
return 0;
}
P1105 平台
没什么难度,循环便利即可(注意条件,初始化)。
#include<iostream>
using namespace std;
struct node
{
int id;
int h;
int r;
int l;
}a[1005];
int main()
{int n,i,j;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i].h;
cin>>a[i].l;
cin>>a[i].r;
a[i].id=i+1;}
int lflag=-1,rflag=-1;
int lmin=200000;
int rmin=200000;
for(i=0;i<n;i++){
lmin=200000;
rmin=200000;
for(j=0;j<n;j++){
if(a[i].h>a[j].h&&a[i].l>a[j].l&&a[i].l<a[j].r&&lflag>=-1){
if(lmin>(a[i].h-a[j].h)){
lmin=a[i].h-a[j].h;
lflag=j;}}
if(a[i].h>a[j].h&&a[i].r>a[j].l&&a[i].r<a[j].r&&rflag>=-1){
if(rmin>(a[i].h-a[j].h)){
rmin=a[i].h-a[j].h;
rflag=j;
}}}
if(lflag==-1){cout<<"0"<<" ";}
else {cout<<a[lflag].id<<" ";lflag=-1;}
if(rflag==-1){cout<<"0"<<endl;}
else {cout<<a[rflag].id<<endl;rflag=-1;}}
return 0;}