PAT(Basic Level) Practice : 1015 德才论 (25分)
1015 德才论 (25分)
重点
运行超时问题:
1.使用scanf和printf输入输出
2.sort使用algorithm自带的,配合vector使用,不要自己写
3.在输入的时候直接进行筛选操作,而不是把所有输入数据存储完,再一步步操作(这样会导致3个测试点超时).
4.用class或者struct进行封装,不要使用vector<vectror<> >。
代码
#include <iostream>
#include"stdlib.h"
#include <vector>
#include <cstdio>
#include <algorithm>
#include <sstream>
using namespace std;
class student{
public:
int num1,num2,num3;
};
bool compare(student stu1, student stu2)
{
if((stu1.num2+stu1.num3)!=(stu2.num2+stu2.num3))
return (stu1.num2+stu1.num3)>(stu2.num2+stu2.num3);
else if(stu1.num2!=stu2.num2)
return stu1.num2>stu2.num2;
else
return stu1.num1<stu2.num1;
}
void print_inf(vector<student > Stu)
{
for(vector<student >::iterator it=Stu.begin();it!=Stu.end();it++)
{
printf("%d %d %d\n",(*it).num1,(*it).num2,(*it).num3);
}
}
int main()
{
int Num,Low,High;
cin>>Num>>Low>>High;
vector<student > Stus;
vector<student > Stus1,Stus2,Stus3,Stus4;
int sum=0;
for(int i=0;i<Num;i++)
{
student stu;
scanf("%d%d%d",&stu.num1,&stu.num2,&stu.num3);
if(stu.num2>=Low&& stu.num3>=Low)
{
sum++;
if(stu.num2>=High&&stu.num3>=High)
Stus1.push_back(stu);
else if(stu.num2>=High&&stu.num3<High)
Stus2.push_back(stu);
else if(stu.num2<High&&stu.num3<High&&stu.num2>=stu.num3)
Stus3.push_back(stu);
else
Stus4.push_back(stu);
}
}
cout<<sum<<endl;
sort(Stus1.begin(),Stus1.end(),compare);
sort(Stus2.begin(),Stus2.end(),compare);
sort(Stus3.begin(),Stus3.end(),compare);
sort(Stus4.begin(),Stus4.end(),compare);
print_inf(Stus1);
print_inf(Stus2);
print_inf(Stus3);
print_inf(Stus4);
//cout<<"1"<<endl;
return 0;
}