結果
| 問題 | 
                            No.433 ICPC国内予選の選抜ルールがこんな感じだったらうれしい
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 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.
ソースコード
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);
        }
			
	}
}