PAT (Advanced Level) 1055. The World's Richest (25)
2016-05-31 19:09
351 查看
排序。随便加点优化就能过。
#include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<string> #include<stack> #include<vector> using namespace std; struct X { char name[10]; int age; int val; }s[100000+10]; int n,k,cnt; int ans[100000+10]; bool cmp(const int &a,const int &b) { if(s[a].val==s[b].val&&s[a].age==s[b].age) return strcmp(s[a].name,s[b].name)<0; if(s[a].val==s[b].val) return s[a].age<s[b].age; return s[a].val>s[b].val; } bool CMP(const X&a,const X&b) { if(a.val==b.val&&a.age==b.age) return strcmp(a.name,b.name)<0; if(a.val==b.val) return a.age<b.age; return a.val>b.val; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%s%d%d",s[i].name,&s[i].age,&s[i].val); sort(s+1,s+1+n,CMP); for(int i=1;i<=k;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); cnt=0; for(int j=1;j<=n;j++){ if(s[j].age>=b&&s[j].age<=c) ans[cnt++]=j; if(cnt==a) break; } printf("Case #%d:\n",i); if(cnt==0) printf("None\n"); else { sort(ans,ans+cnt,cmp); for(int j=0;j<min(a,cnt);j++) printf("%s %d %d\n",s[ans[j]].name,s[ans[j]].age,s[ans[j]].val); } } return 0; }
相关文章推荐
- 条件编译实现日志打印
- ORACLE命令笔记
- gluPerspective注意事项
- git 笔记
- 端口理解
- java加密解密--对称加密
- pl/sql中如何实现对数据的快速增删改
- 第十三周项目3:动物这样叫(3)
- Map集合遍历的2种方法
- <Js>修改样式
- 第十二周项目4-String类的构造
- 飛飛(五十二)抽象类的应用,用指向基类的指针,且基类为抽象类
- Linux编程学习环境搭建
- 5月31日
- [MongoDB]count,gourp,distinct
- POJ-2387 Til the Cows Come Home ( 最短路 )
- Java创建文件
- 向上沟通
- 你好,Oh My Zsh - 社区力量全新方式定义命令行
- Java加密技术(三)——PBE算法