hdu 5131(2014 广州—模拟)
2015-10-06 21:25
232 查看
题意:给你n个人以及他们的杀人数。先按杀人数从大到小排名输出,然后是一些询问
一个人名,①输出杀人数比他大的人数和+1;②如果有人杀人数和他一样而且名字的字典序比他小,输出人数+1,没有则无视。
一个人名,①输出杀人数比他大的人数和+1;②如果有人杀人数和他一样而且名字的字典序比他小,输出人数+1,没有则无视。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <map> using namespace std; typedef long long ll; #define N 100017 map<string,int> mp; int n; struct node { string name; int Rank; } pnode[205]; bool cmp(node a,node b) { if(a.Rank != b.Rank) return a.Rank > b.Rank; else return a.name < b.name; } void fin(string Name) { int cur = mp[Name]; int tt= pnode[cur].Rank; int num1 = 1; int num2 = 1; for(int i = cur - 1; i >= 1; i--) { if(pnode[i].Rank >tt) num1++; if(pnode[i].Rank == tt) num2++; } printf("%d",num1); if(num2 != 1) printf(" %d\n",num2); else printf("\n"); } int main() { int n; while(scanf("%d",&n) && n) { mp.clear(); for(int i = 1; i <=n ; i++) { cin>>pnode[i].name>>pnode[i].Rank; } sort(pnode+1,pnode+n+1,cmp); for(int i=1; i<=n; i++) { cout<<pnode[i].name<<" "<<pnode[i].Rank<<endl; mp[pnode[i].name] = i; } string tname; int k; scanf("%d",&k); for(int i = 1; i <= k; i++) { cin>>tname; fin(tname); } } return 0; }
相关文章推荐
- ns-2与TCP拥塞模拟 之二 模拟输出的封包trace文件格式
- 细数EDM营销中存在的两大盲点
- C++链式队列
- Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest 状压DP
- HDU 4850 Wow! Such String! 欧拉回路
- i/o notes
- ubuntu系统与win 7系统时间不一致问题
- Python正则表达式学习小结
- 拿什么拯救你,“闯祸”的充电宝
- leetcode16
- UIKit学习笔记1
- 充电宝质量良莠不齐 请谨慎选择
- 最近公共祖先(LCA):并查集+深搜
- 一个PHP开发者总结的九条建议
- UI 动画之CALayer+CAAnimation 之 CAKeyframeAnimation
- c++primer plus第十七章-cin输入、cout输出和文件I/O
- 设计模式之ChainOfResponsibility:过滤Request和Response
- 结对项目博客
- 实现一个简单的散列表(HashMap)
- 96 c 段错误 && int *p = NULL 和 *p = NULL区别