每次寫到腦殘題頭都痛死惹……
首先problem數最多是13,不是什麼9……-.-。
另外只要得到correct之後,
不管之後又得到correct或是incorrect,
通通不用管它……
問題是題目有寫嗎?有嗎?沒吧!
那誰知道這種機車狀況要怎麼處理?
定義一下會死嗎?
無聊!
/* ACM 10258 Contest Scoreboard * mythnc * 2012/01/11 23:07:41 * run time: 0.004 */ #include <stdio.h> #include <string.h> #define LINEMAX 25 #define MAXP 13 #define MAXC 100 typedef struct contestant { int num, solved, penalty; int tried[MAXP], ac[MAXP]; } Contestant; typedef enum {FALSE = 0, TRUE} bool; int input(Contestant *); int find(Contestant *, int, int); int cmp(const void *, const void *); void output(Contestant *, int); int main(void) { Contestant con[MAXC]; int set, i, n; scanf("%d", &set); getchar(); getchar(); for (i = 0; i < set; i++) { if (i > 0) putchar('\n'); n = input(con); qsort(con, n, sizeof(Contestant), cmp); output(con, n); } return 0; } /* input: receive input datas */ int input(Contestant *con) { int num, prob, time, n, pos; char sub; char line[LINEMAX]; n = 0; while (fgets(line, LINEMAX, stdin)) { if (strlen(line) <= 1) /* blank line */ break; sscanf(line, "%d %d %d %c", &num, &prob, &time, &sub); pos = find(con, num, n); if (pos == -1) { /* add and init */ con[n].num = num; con[n].solved = con[n].penalty = 0; memset(con[n].tried, 0, MAXP); memset(con[n].ac, FALSE, MAXP); pos = n++; } if (sub == 'C' && !con[pos].ac[prob - 1]) { con[pos].solved++; con[pos].penalty += time + con[pos].tried[prob - 1]; con[pos].ac[prob - 1] = TRUE; } else if (sub == 'I' && !con[pos].ac[prob - 1]) con[pos].tried[prob - 1] += 20; } return n; } /* find: if num in con return it's position * else retrn -1 */ int find(Contestant *con, int num, int n) { int i; for (i = 0; i < n; i++) if (con[i].num == num) return i; return -1; } /* cmp: for qsort() */ int cmp(const void *a, const void *b) { if (((Contestant *)a)->solved != ((Contestant *)b)->solved) return ((Contestant *)b)->solved - ((Contestant *)a)->solved; else if (((Contestant *)a)->penalty != ((Contestant *)b)->penalty) return ((Contestant *)a)->penalty - ((Contestant *)b)->penalty; else return ((Contestant *)a)->num - ((Contestant *)b)->num; } /* output: output results */ void output(Contestant *con, int n) { int i; for (i = 0; i < n; i++) printf("%d %d %d\n", con[i].num, con[i].solved, con[i].penalty); }
沒有留言:
張貼留言