結果
| 問題 |
No.628 Tagの勢い
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-10-23 21:44:17 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,063 bytes |
| コンパイル時間 | 241 ms |
| コンパイル使用メモリ | 30,848 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-07 22:58:57 |
| 合計ジャッジ時間 | 1,148 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 |
ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char word[21];
int score;
} s;
int compare(const void *x, const void *y)
{
return ((s*)y)->score - ((s*)x)->score;
}
void insertionSort(int top, s tag[])
{
int i, j;
s tmp;
for (i = 1; i < top; ++i) {
tmp = tag[i];
for (j = i - 1; j >= 0 && strcmp(tag[j].word, tmp.word) > 0 && tag[j].score == tmp.score; --j) tag[j + 1] = tag[j];
tag[j + 1] = tmp;
}
}
int main(void)
{
char tmp[21];
int N, M, S, top = 0, i, j, k;
s tag[10000];
scanf("%d", &N);
for (i = 0; i < N; ++i) {
scanf("%*d%d%d", &M, &S);
for (j = 0; j < M; ++j) {
scanf("%s", tmp);
for (k = 0; k < top; ++k) {
if (strcmp(tag[k].word, tmp) == 0) break;
}
if (k == top) {
strcpy(tag[top].word, tmp);
tag[top].score = S;
++top;
}
else tag[k].score += S;
}
}
qsort(tag, top, sizeof(s), compare);
insertionSort(top, tag);
for (i = 0; i < 10 && i < top; ++i) printf("%s %d\n", tag[i].word, tag[i].score);
return 0;
}