题目
AC代码
#include<bits/stdc++.h>
using namespace std;
struct Node{
string name;
int age,worth;
};
bool cmp(Node x,Node y){
if(x.worth!=y.worth) return x.worth>y.worth;
else if(x.age!=y.age) return x.age<y.age;
else return x.name<y.name;
}
int main()
{
int n,k;
cin>>n>>k;
Node node[n];
for(int i=0;i<n;i++)
{
node[i].name.resize(10);
scanf("%s %d %d",&node[i].name[0],&node[i].age,&node[i].worth);
}
sort(node,node+n,cmp);
for(int t=1;t<=k;t++)
{
int x,minn,maxn;
cin>>x>>minn>>maxn;
printf("Case #%d:\n",t);
int pos=-1,cnt=0;
for(int i=0;i<n;i++)
{
if(node[i].age>=minn&&node[i].age<=maxn)
{
printf("%s %d %d\n",node[i].name.c_str(),node[i].age,node[i].worth);
cnt++;
if(cnt==x) break;
}
}
if(cnt==0) printf("None\n");
}
}
解决运行超时问题
首先我想到的就是用scanf和printf替代cin和cout,具体到这道题就产生了一个问题:如何输入和输入string类型的变量
我参考了如下两篇文章:
C++ scanf()输入string类型变量
printf输出string类型
在编译成功通过后,pta还是告诉我有一个节点运行超时
那接下来就要看一下代码的逻辑是否可以优化,我原先是遍历找出符合条件的节点放入ans的向量中,然后再排序输出,这样的逻辑存在冗余。因此我将其修改为先整体按照要求排序,再根据年龄要求输出,也就是ac代码的逻辑,果然完美通过了测试点