Tanky WooRSS

HDOJ 2093 考试排名

07 Aug 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2093


郁闷啦,看见题目那么多,人就头晕。。。还好,虽然题目+代码麻烦点,但是这题的整体思路很清晰,就是求积分和A掉的题目数。然后就交给排序的函数sort或qsort了。 第一次WA了,结果是数组开小了,开100不够,开1000就AC了~~~


代码:

// Author: Tanky Woo
// HDOJ 2093
// Accepted 2093 0MS 212K 1628 B C++ Tanky Woo 
// 擦,第一次哥数组开小了,只开了100,结果WA了。
#include
#include 
using namespace std;

typedef struct Accepted
{
    char name[11];
    int ans;
    int score;
}Accepted;

Accepted AC[100];

bool cmp(Accepted a, Accepted b)
{
    if(a.ans > b.ans)
        return 1;
    else if(a.ans == b.ans)
        if(a.score < b.score)
            return 1;
    return 0;
}

char stu_name[11];
int n, m;  // n-考试题数, m-单位罚分
int main()
{
    freopen("input.txt", "r", stdin);
    scanf("%d %d", &n;, &m;);
    int cnt = 0; // 记录人数
    char tmp[8];
    while(scanf("%s", AC[cnt].name) != EOF)
    {
        for(int i=0; i<n; ++i)
        {
            scanf("%s", tmp);
            if(tmp[0]=='0' || tmp[0]=='-')
                continue;
            AC[cnt].ans++;
            int j;
            for(j=0; j<strlen(tmp); ++j)
                if(tmp[j]=='(')
                    break;
            int sum=0;
            for(int k=0; k<j; ++k)
            {
                sum *= 10;
                sum += tmp[k]-'0';
            }
            AC[cnt].score += sum;
            sum = 0;
            for(int k=j+1; k<strlen(tmp)-1; ++k)
            {
                sum *= 10;
                sum += tmp[k]-'0';
            }
            AC[cnt].score += sum*m;
        }
        cnt++;
    }
    sort(AC, AC+cnt, cmp);
    for(int i=0; i<cnt; ++i)
        printf("%-10s %2d %4d\n", AC[i].name, AC[i].ans, AC[i].score);
    return 0;
}