题意:

输入两个正整数N和K(N<=1e5,K<=1000),接着输入N行,每行包括一位老板的名字,年龄和财富。K次询问,每次输入三个正整数M,L,R(M<=100,L,R<=200),输出至多M位年龄区间在L,R之间的老板的名字年龄和财富,按照财富降序,年龄升序,姓名字典序输出。

AAAAAccepted code:

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
string s;
typedef struct account{
string name;
int age,worth;
};
bool cmp(account a,account b){
if(a.worth!=b.worth)
return a.worth>b.worth;
if(a.age!=b.age)
return a.age<b.age;
return a.name<b.name;
}
vector<account>vv;
vector<account>v;
int sum[];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n,k;
cin>>n>>k;
int age,w;
for(int i=;i<=n;++i){
cin>>s>>age>>w;
account tamp;
tamp.name=s;
tamp.age=age;
tamp.worth=w;
vv.push_back(tamp);
}
int x,l,r;
sort(vv.begin(),vv.end(),cmp);
for(int i=;i<vv.size();++i)//根据数据规模优化,大幅缩短运行时间
if(sum[vv[i].age]<){
v.push_back(vv[i]);
++sum[vv[i].age];
}
for(int i=;i<=k;++i){
cin>>x>>l>>r;
cout<<"Case #"<<i<<":\n";
int flag=;
for(int j=;j<v.size();++j){
if(v[j].age>=l&&v[j].age<=r){
cout<<v[j].name<<" "<<v[j].age<<" "<<v[j].worth<<"\n";
--x;
flag=;
}
if(!x)
break;
}
if(!flag)
cout<<"None\n";
}
return ;
}

最新文章

  1. 排序map
  2. Win10开机提示Resume from Hibernation该怎么办?
  3. Linux下查看mysql、apache是否安装,安装,卸载等操作
  4. Jsp入门学习笔记
  5. Oracle NoLogging Append 方式减少批量insert的redo_size
  6. Vue.js常见问题
  7. 《OD学hadoop》第三周0710
  8. Inside of Jemalloc
  9. 来自苹果的编程语言——Swift简单介绍
  10. Laravel 中国 - 巨匠级PHP开发框架 Laravel 中国社区
  11. CodeVS1344 线型网络
  12. 滑稽的下午--angularjs 2.0管道的使用
  13. [C#] 获取计算机内部信息 - ComputerInfoHelper
  14. MyBatis3系列__Demo地址
  15. Apache httpd.conf配置文件主要内容解释
  16. GROUP BY 和 ORDER BY 同时使用问题
  17. 怎么样才是设计功能函数的好思路(javascript)?
  18. c++的读入txt文件(转)
  19. &lt;基础&gt; PHP 字符串操作
  20. IoCopyCurrentIrpStackLocationToNext与IoSetCompletionRoutine的深入理解

热门文章

  1. vue基础api
  2. Django中的check指令和sqlmigrate指令
  3. threading 官方 线程对象和锁对象以及条件对象condition
  4. AndroidStudio3.3+OpenCV开发环境搭建
  5. python lib timeit 测试运行时间
  6. Vue.js 学习入门:介绍及安装
  7. ubuntu建立软链接注意事项
  8. shell的debug模式
  9. oss创建文件夹
  10. ClickOnce部署,修改deploymentProvider