您的位置:首页 > 其它

HDOJ 1236 排名(排序)(浙大2005研究生复试)

2015-02-24 19:45 344 查看
【思路】:排序。

【注意】:qsort用法,字符串不要相减,用strmcp。升序a在前,b在后。降序相反。

【AC代码】:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

#define MAX 20+2
struct Candidate
{
char num[MAX];
int score;
};

int cmp(const void *a, const void *b)
{
Candidate *c = (Candidate*)a;
Candidate *d = (Candidate*)b;
if ((*c).score != ((*d).score))
return (*d).score - (*c).score;
else
return strcmp(((*c).num), (*d).num);
}

int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int N = 0, M = 0, G = 0;
while (cin >> N >> M >> G && N)
{
int i = 0, cnt = 0;
int sco[10];
Candidate can[1000];

//input score
for (i = 0; i < M; i++)
cin >> sco[i];

for (i = 0; i < N; i++)
{
int m = 0, s = 0, sum = 0, j = 0;
cin >> can[i].num;
cin >> m;
for (j = 0; j < m; j++)
{
cin >> s;
sum += sco[s-1];
}
can[i].score = sum;
if (sum >= G)
cnt++;
}

//sort
qsort(can, N, sizeof(Candidate), cmp);
cout << cnt << endl;
for (i = 0; i < N; i++)
if (can[i].score >= G)
cout << can[i].num << " " << can[i].score << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: