結果
| 問題 | 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);
}
}
}