結果
問題 | No.447 ゆきこーだーの雨と雪 (2) |
ユーザー |
![]() |
提出日時 | 2017-01-09 19:30:57 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 118 ms / 2,000 ms |
コード長 | 3,740 bytes |
コンパイル時間 | 1,163 ms |
コンパイル使用メモリ | 117,068 KB |
実行使用メモリ | 33,952 KB |
最終ジャッジ日時 | 2024-12-18 00:19:16 |
合計ジャッジ時間 | 4,059 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
コンパイルメッセージ
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;using System.Collections.Generic;using System.Collections.Specialized;using System.Text;using System.Text.RegularExpressions;using System.Linq;class Magatro{static int N;static int[] L;static int T;static string[] Name;static int[] P;const string ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";static HashSet<string> Hs = new HashSet<string>();static void Main(){Scanner sc = new Scanner();var Last = new Dictionary<string ,int>();N = sc.NextInt();L = new int[N];for (int i = 0; i < N; i++){L[i] = sc.NextInt();}T = sc.NextInt();var D = new Dictionary<string, int>();for (int i = 0; i < 26; i++){D[ABC[i].ToString()] = i;}Name = new string[T];P = new int[T];for (int i = 0; i < T; i++){Name[i] = sc.Next();Hs.Add(Name[i]);P[i] = D[sc.Next()];}foreach(string s in Hs){Last.Add(s, 0);}for(int i = 0; i < T; i++){Last[Name[i]] = Math.Max(Last[Name[i]], i);}List<string>[] Li = new List<string>[N];for(int i = 0; i < N; i++){Li[i] = new List<string>();}for(int i = 0; i < T; i++){Li[P[i]].Add(Name[i]);}var H = new Dictionary<string, int[]>();foreach(string s in Hs){H.Add(s, new int[N]);}for(int i = 0; i < N; i++){for(int j = 0; j < Li[i].Count; j++){H[Li[i][j]][i] = Score(j + 1, L[i]);}}SC[] Sc = new SC[Hs.Count];int ind = 0;foreach(var i in H){Sc[ind].Name = i.Key;Sc[ind].Score = i.Value.ToArray();Sc[ind].Last = Last[i.Key];ind++;}Array.Sort(Sc, compare);int iii = 1;foreach (var s in Sc){Console.Write("{1} {0} ", s.Name,iii);Console.Write(string.Join(" ",s.Score.Select(ii=>ii.ToString()).ToArray()));Console.Write(" {0}",s.Score.Sum());Console.WriteLine();iii++;}//Console.WriteLine(Score(1, 2));}static int Score(int jun,int star){return 50 * star + ((500*star) / (8 + 2 * jun));}static int compare(SC a,SC b){int res = b.Score.Sum().CompareTo(a.Score.Sum());if (res == 0){return a.Last.CompareTo(b.Last);}else{return res;}}}struct SC{public string Name;public int Last;public int[] Score;public SC(string name,int N){Score = new int[N];Name = name;Last = -1;}}public class Scanner{private string[] S;private int Index;private char Separator;public Scanner(char separator=' '){Index = 0;Separator = separator;}public string Next(){string result;if (S == null || Index >= S.Length){S = Line();Index = 0;}result = S[Index];Index++;return result;}private string[] Line(){return Console.ReadLine().Split(Separator);}public int NextInt(){return int.Parse(Next());}public double NextDouble(){return double.Parse(Next());}public long NextLong(){return long.Parse(Next());}}