結果

問題 No.433 ICPC国内予選の選抜ルールがこんな感じだったらうれしい
ユーザー jousen
提出日時 2016-10-14 23:56:25
言語 C#(csc)
(csc 3.9.0)
結果
WA  
実行時間 -
コード長 4,716 bytes
コンパイル時間 900 ms
コンパイル使用メモリ 111,872 KB
実行使用メモリ 50,028 KB
最終ジャッジ日時 2024-11-22 07:39:28
合計ジャッジ時間 17,892 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 5 WA * 43
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;


namespace tes
{
	class contest
	{
				
		
		static void Main(string[] args)
		{

			 var input = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            int n = input[0];
            int k = input[1];
            var arr = new int[n][];

            var passed = new Dictionary<int, int>();
            var score = new Dictionary<int, int>();
            var memo = new Dictionary<Tuple<int, int, int>, int>();

            //memo the index of teams
            for (int i =0; i< n; i++)
            {
                arr[i] = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();

                int ac = arr[i][0];
                int penalty = arr[i][1];
                int univarsity = arr[i][2];

                memo[new Tuple<int, int, int>(ac, penalty, univarsity)] = i;
            }


            //Array.Sort(arr, (a, b) =>  b[0]-a[0]);
            arr = arr.OrderByDescending(a=>a[0]).ThenBy(c=>c[2]).ThenBy(b=>b[1]).ToArray();

            //memo the temporary No
            //var tmpNo = new Dictionary<int, int>();
            //for (int i = 0; i < n; i ++)
            //{
            //    int ac = arr[i][0];
            //    int penalty = arr[i][1];
            //    int univarsity = arr[i][2];

            //    memo[new Tuple<int, int, int>(ac, penalty, univarsity)] = i + 1;
            //}

            //count ans memo scores of all teams
            for (int i = 0; i < n; i++)
            {
                int ac = arr[i][0];
                int penalty = arr[i][1];
                int univarsity = arr[i][2];

              
                if (!score.Keys.Contains(ac))
                {
                    score[ac] = 1;
                }
                else score[ac] = score[ac] + 1;

            }


            var ans = new List<int>();


            for(int i =0; i<arr.Length-1; i++)
            {
                int ac = arr[i][0];
                int penalty = arr[i][1];
                int univarsity = arr[i][2];

                if (arr[i][0] == arr[i+1][0])
                {
                    if(arr[i][2] == arr[i+1][2])
                    {
                        ans.Add(memo[new Tuple<int, int, int>(ac, penalty, univarsity)]);

                        if (!passed.Keys.Contains(arr[i][2]))
                        {
                            passed[arr[i][2]] = 1;
                        }
                        else
                        {
                            passed[arr[i][2]] += 1;
                        }
                    }
                    else
                    {
                        if ((passed.Keys.Contains(arr[i][2]) && passed.Keys.Contains(arr[i+1][2]))&&
                            passed[arr[i][2]] < passed[arr[i+1][2]])
                        {
                            ans.Add(memo[new Tuple<int, int, int>(ac, penalty, univarsity)]);

                            if (!passed.Keys.Contains(arr[i][2]))
                            {
                                passed[arr[i][2]] = 1;
                            }
                            else
                            {
                                passed[arr[i][2]] += 1;
                            }
                        }
                        else
                        {
                            ac = arr[i+1][0];
                            penalty = arr[i+1][1];
                            univarsity = arr[i+1][2];

                            ans.Add(memo[new Tuple<int, int, int>(ac, penalty, univarsity)]);

                            if (!passed.Keys.Contains(arr[i+1][2]))
                            {
                                passed[arr[i+1][2]] = 1;
                            }
                            else
                            {
                                passed[arr[i+1][2]] += 1;
                            }
                        }
                    }
                }
                else
                {
                    ans.Add(memo[new Tuple<int, int, int>(ac, penalty, univarsity)]);

                    if (!passed.Keys.Contains(arr[i][2]))
                    {
                        passed[arr[i][2]] = 1;
                    }
                    else
                    {
                        passed[arr[i][2]] += 1;
                    }
                }

                if(i==arr.Length-1)
                {
                    ans.Add(memo[new Tuple<int, int, int>(ac, penalty, univarsity)]);
                }

                if (ans.Count == k) break;
            }

            ans.ForEach(Console.WriteLine);

        }
			
	}
}
0