PAT上这道题目德才论,
我的代码如下
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct student{
int xuehao; //学号
int de; //德分
int cai; //才分
char tag; //德才类型
}stu;
struct rule2
{
bool operator()(const stu & a ,const stu & b)
{
if(a.tag == b.tag) //类型相同,比较总分
{
if ((a.de+a.cai)==(b.de+b.cai)) //总分相同比较德分
{
if(a.de == b.de) //德分相同,比学号
return a.xuehao < b.xuehao;
else
return a.de > b.de;
}
else
return a.de+a.cai > b.de+b.cai;
}
else
return a.tag<b.tag;
}
};
int main(void)
{
int N,L,H;
cin >> N >> L >> H;
stu *s= new stu[N];
int cnt = 0; //统计合格人数
for(int i=0;i<N;i++)
{
cin >> s[i].xuehao >> s[i].de >> s[i].cai; //输入学生信息
if(s[i].de<L || s[i].cai<L) //不及格属于第五类学生
{
s[i].tag = 5;
continue;
}
else
{
cnt++;
//第一类学生,才德全尽
if(s[i].de>=H && s[i].cai>=H)
s[i].tag = 1;
//第二类学生,德胜才
else if(s[i].de>=H && s[i].cai<H )
s[i].tag = 2;
//第三类学生
else if(s[i].de<H && s[i].cai<H && s[i].de>= s[i].cai)
s[i].tag = 3;
//第四类学生
else
s[i].tag = 4;
}
}
sort(s,s+N,rule2());
cout << cnt << endl;
for(int i=0; i<cnt;i++)
cout << s[i].xuehao << " " << s[i].de << " " << s[i].cai<<endl;
return 0;
}
5个测试用例中有两个显示运行超时,请问上述代码如何优化,我搜过一些参考答案,清一色使用<vector>来做的,我目前刚学C++,对<vector>不了解,所以初次之外,有没有别的优化方法?谢谢
方法1:cstdio 库里的读入scanf 输出pirntf
方法2:读入优化cin.sync_with_stdio(false) 与方法一不能同时使用
自测