1055 The World’s Richest (25分)
试着直接排序遍历,并用scanf printf输入输出节省时间,居然过了,500ms最高用了450ms!
不过scanf输入string时出了个问题:
scanf("%s%d%d", temp.name.c_str(), &temp.age,&temp.w);
//此时查看结构体内的name时,是完全正确的,但是用sort排序却会出现错误,name不能正常按字母序排序
//久思不得其解,遂查找scanf输入string的方法,如下:
string a;
a.resize(100); //需要预先分配空间
scanf("%s", &a[0]);
printf("%s\n", a.c_str());
return 0;
//当然还可以
string s;
char c[10]
scanf("%s",c);
s=c;//会提示可能未添加字符串终止符
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct node {
string name;
int age, w;
};
bool cmp1(node a, node b) {
return a.w != b.w ? a.w > b.w:(a.age != b.age ? a.age < b.age : a.name < b.name);
}
int main() {
int n, k, age, worth;
string s;
scanf("%d%d", &n, &k);
vector<node> info;
for (int i = 0; i < n; i++) {
node temp;
temp.name.resize(10);
scanf("%s%d%d", &temp.name[0], &temp.age,&temp.w);
info.push_back(temp);
}
sort(info.begin(), info.end(), cmp1);
int m, amin, amax;
for (int i = 0; i < k; i++) {
scanf("%d%d%d", &m, &amin, &amax);
printf("Case #%d:\n", i + 1);
int cnt = 0;
for (int j = 0; j < n && cnt < m; j++) {
if (info[j].age <= amax && info[j].age >= amin) {
printf("%s %d %d\n", info[j].name.c_str(), info[j].age, info[j].w);
cnt++;
}
}
if (!cnt) { printf("None\n"); }
}
return 0;
}