题:http://acm.hdu.edu.cn/showproblem.php?pid=1236
思路:比较水的题,基本就是结构体排序写一下就可以了
strcmp :
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
struct node{
char id[25];
int cnt;
int sum;
}Per[1010];
bool cmp(node a,node b)
{
if(a.sum!=b.sum)return a.sum>b.sum;
return strcmp(a.id,b.id)>0?0:1;
}
int main()
{
int n,m,g;
while(scanf("%d",&n)&&n)
{
scanf("%d%d",&m,&g);
int gra[15];
for(int i=1; i<=m; i++)
scanf("%d",&gra[i]);
for(int i=0; i<n; i++)
{
scanf("%s%d",Per[i].id,&Per[i].cnt);
Per[i].sum=0;
for(int j=0; j<Per[i].cnt; j++)
{
int tmp;
scanf("%d",&tmp);
Per[i].sum+=gra[tmp];
}
}
sort(Per,Per+n,cmp);;
int finsum=0;
for(int i=0; i<n; i++)
{
if(Per[i].sum>=g)
finsum++;
else
break;
}
printf("%d\n",finsum);
for(int i=0; i<n; i++)
if(Per[i].sum>=g)
printf("%s %d\n",Per[i].id,Per[i].sum);
}
return 0;
}