結果
問題 | No.628 Tagの勢い |
ユーザー | yuki2006 |
提出日時 | 2018-01-11 12:39:40 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 36 ms / 2,000 ms |
コード長 | 4,149 bytes |
コンパイル時間 | 899 ms |
コンパイル使用メモリ | 112,248 KB |
実行使用メモリ | 19,456 KB |
最終ジャッジ日時 | 2024-10-07 22:22:58 |
合計ジャッジ時間 | 2,156 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 32 ms
18,560 KB |
testcase_01 | AC | 32 ms
18,816 KB |
testcase_02 | AC | 30 ms
18,816 KB |
testcase_03 | AC | 31 ms
18,560 KB |
testcase_04 | AC | 26 ms
18,048 KB |
testcase_05 | AC | 31 ms
18,688 KB |
testcase_06 | AC | 31 ms
18,816 KB |
testcase_07 | AC | 31 ms
18,688 KB |
testcase_08 | AC | 31 ms
18,688 KB |
testcase_09 | AC | 30 ms
18,816 KB |
testcase_10 | AC | 31 ms
18,688 KB |
testcase_11 | AC | 31 ms
18,816 KB |
testcase_12 | AC | 35 ms
19,200 KB |
testcase_13 | AC | 35 ms
19,328 KB |
testcase_14 | AC | 35 ms
19,200 KB |
testcase_15 | AC | 36 ms
19,456 KB |
testcase_16 | AC | 34 ms
18,944 KB |
testcase_17 | AC | 31 ms
18,688 KB |
testcase_18 | AC | 30 ms
18,688 KB |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System; using System.Collections.Generic; namespace lecture { class MainClass { public static void Main(string[] args) { string row = Console.ReadLine(); int N = int.Parse(row); Dictionary<string, int> tagScores = new Dictionary<string, int>(); for (int i = 0; i < N; i++) { // 画像の番号の行を読み込む string imageNo = Console.ReadLine(); // タグの数 スコアの行を読み込む row = Console.ReadLine(); // Split() は引数がないと空白で区切って配列にする string[] ss = row.Split(); // 配列の0番目がタグの数 int tagNum = int.Parse(ss[0]); // 配列の1番目がスコア int score = int.Parse(ss[1]); // タグの行を読み込んで 空白で区切るとタグの配列になる string[] tagsTmp = Console.ReadLine().Split(); // tags[0]=run,tags[1]=getaway ,tags[2]=fast //TODO まとめる処理をする // それぞれのタグの点数を加算していくだけ for (int m = 0; m < tagsTmp.Length; m++) { string tag = tagsTmp[m]; if (tagScores.ContainsKey(tag)) { // Dictionaryにtags[m]の文字列のキーが有る場合 // すでにあるキーにスコアを追加してあげる // すでにキーが有る場合は += で追加する tagScores[tag] += score; } else { // キーがない場合は そのスコア作る // 作る場合は =で 代入する tagScores[tag] = score; } } } // ここまでで、タグとスコアの値を合計できるはず // tagScores.Countはそのキーの数なのでその分配列を確保する // タグの名前とそのタグのスコア分の配列を用意する string[] tags = new string[tagScores.Count]; int[] scores = new int[tagScores.Count]; // Dictonaryから一旦配列に入れ直す int p = 0; foreach (string key in tagScores.Keys) { tags[p] = key; scores[p] = tagScores[key]; p++; } // ☆ スコア順 スコアが同じ時にアルファベット順にする処理をする // スコアに対してバブルソートをする 添字が小さいほど大きくしたい for (int i = 0; i < scores.Length; i++) { for (int k = 0; k < scores.Length - i - 1; k++) { // string のA.CompareTo(B) は // 戻り値が -1のときは A < B // 戻り値が 0 のときは A == B // 戻り値が 1 のときは A > B if (scores[k] < scores[k + 1] || scores[k] == scores[k + 1] && tags[k].CompareTo(tags[k + 1]) == 1) { int tmp = scores[k]; scores[k] = scores[k + 1]; scores[k + 1] = tmp; string tmp2 = tags[k]; tags[k] = tags[k + 1]; tags[k + 1] = tmp2; } } } // TODO 最大10件まで出力する // それらを出力する int count = 10; if (count > tags.Length) { count = tags.Length; } for (int i = 0; i < count; i++) { Console.WriteLine(tags[i] + " " + scores[i]); } } } }