火影忍者的男主角漩涡鸣人,因为身上封印着邪恶的九尾妖狐,无父无母的他受尽了村人的冷眼与歧视,他下定决心要成为第六代火影,让所有人都认同他的存在,火影是动漫火影忍者中主人公鸣人所在的国家的最强忍者的头衔,史上最强火影为鸣人的父亲--四代火影波风水门,乃是传说级的人物,也是最年轻的火影,要成为火影,不仅需要有千种忍术和全村人的认同 更要有冷静的头脑 德高望重也必不可少 还要有优秀的领导能力,这之中战斗能力是最重要的,然后是领导能力,现在又到了选火影的时候了,可是鸣人此时还很弱,所以给出m个候选人,每个人有战斗力、领导能力两个主要的作为能力判断的依据,还有n个个人信息,第一条信息为名字,按战斗力和领导能力的高低作为标准,判断这些人中最具有担任火影资格的k人。
Input
第一行:m,n,k都为整数
然后是m个候选人的信息,每个人的信息包括n行,第一行是名字,接下来n-1行是其他信息,每条信息为不超过100的字符串,然后是战斗力、领导能力为一行,m、n不超过500. k不超过50.字符串均不包括空白符
Output输出前k个人的名字。战斗力和领导能力都相同则按名字的字典序排列。(如果名字也相同则依次按后面的个人信息的字典序排列)Sample Input
5 3 3
dawn
haligong
dianji
500 500
freelon
haligong
wangluo
500 500
zeropointer
haligong
dianqi
600 400
cha
haligong
computer
800 600
13brother
haligong
computer
400 400
Sample Output
cha
zeropointer
dawn
题解:sort,字符串比较
#include <iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> using namespace std; int n,m,k; struct node { char ch[505][105]; int x,y; }a[505]; bool cmp(node a,node b) { if (a.x!=b.x) return a.x>b.x; else if (a.y!=b.y) return a.y>b.y; else { for(int j=1;j<=n;j++) { if (strcmp(a.ch[j],b.ch[j])!=0)//等于0的时候说明两个字符串相等,strcmp<0,按字典序;>0,降续; return strcmp(a.ch[j],b.ch[j])<0; } } } int main() { while(~scanf("%d%d%d",&m,&n,&k)) { for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) scanf("%s",a[i].ch[j]); scanf("%d%d",&a[i].x,&a[i].y); } sort(a+1,a+1+m,cmp); //sort(a+1,a+1+k,cmp2); for(int i=1;i<=k;i++) printf("%s ",a[i].ch[1]); } return 0; }