結果
問題 | No.628 Tagの勢い |
ユーザー | yuki2006 |
提出日時 | 2018-01-11 14:42:08 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 34 ms / 2,000 ms |
コード長 | 4,181 bytes |
コンパイル時間 | 809 ms |
コンパイル使用メモリ | 113,596 KB |
実行使用メモリ | 26,972 KB |
最終ジャッジ日時 | 2024-10-07 22:24:43 |
合計ジャッジ時間 | 1,994 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 30 ms
24,884 KB |
testcase_01 | AC | 29 ms
24,504 KB |
testcase_02 | AC | 27 ms
24,760 KB |
testcase_03 | AC | 29 ms
24,760 KB |
testcase_04 | AC | 24 ms
24,120 KB |
testcase_05 | AC | 29 ms
26,972 KB |
testcase_06 | AC | 28 ms
24,888 KB |
testcase_07 | AC | 31 ms
24,756 KB |
testcase_08 | AC | 31 ms
24,676 KB |
testcase_09 | AC | 30 ms
26,544 KB |
testcase_10 | AC | 30 ms
24,628 KB |
testcase_11 | AC | 29 ms
24,936 KB |
testcase_12 | AC | 33 ms
26,792 KB |
testcase_13 | AC | 34 ms
24,884 KB |
testcase_14 | AC | 32 ms
24,624 KB |
testcase_15 | AC | 32 ms
22,580 KB |
testcase_16 | AC | 31 ms
24,676 KB |
testcase_17 | AC | 30 ms
26,540 KB |
testcase_18 | AC | 29 ms
26,840 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 class TagScore { public string tag; public int score; } 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 // それぞれのタグの点数を加算していくだけ 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はそのキーの数なのでその分配列を確保する // タグの名前とそのタグのスコア分の配列を用意する TagScore[] tagScoreArray = new TagScore[tagScores.Count]; // Dictonaryから一旦配列に入れ直す int p = 0; foreach (string key in tagScores.Keys) { TagScore t = new TagScore(); t.tag = key; t.score = tagScores[key]; tagScoreArray[p] = t; p++; } Array.Sort(tagScoreArray, ScoreSort); // 最大10件まで出力する int count = 10; if (count > tagScoreArray.Length) { count = tagScoreArray.Length; } for (int i = 0; i < count; i++) { Console.WriteLine(tagScoreArray[i].tag + " " + tagScoreArray[i].score); } } // x , y という順で引数が与えられる。 // xのほうが先に来てほしい場合 戻り値は -1 // 逆の場合は 戻り値は 1 を返す // あまり気にしなくてもいいんですが 同じ場合は0を返す public static int ScoreSort(TagScore x, TagScore y) { if (x.score > y.score) { return -1; } else if (x.score < y.score) { return 1; } else { // x.score == y.scoreのとき if (x.tag.CompareTo(y.tag) == -1) { return -1; } else if (x.tag.CompareTo(y.tag) == 1) { return 1; } else { return 0; } } } } }