結果
| 問題 | No.433 ICPC国内予選の選抜ルールがこんな感じだったらうれしい |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-10-15 00:20:08 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,895 bytes |
| 記録 | |
| コンパイル時間 | 1,289 ms |
| コンパイル使用メモリ | 107,392 KB |
| 実行使用メモリ | 39,552 KB |
| 最終ジャッジ日時 | 2024-11-22 08:46:40 |
| 合計ジャッジ時間 | 14,290 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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.Linq;
using System.Text;
using System.Threading.Tasks;
namespace yuki_433
{
class Program
{
static int N, K;
static HashSet<University> L = new HashSet<University>();
static int[] C = new int[100001];
static bool flag;
static int Counter;
static void Main(string[] args)
{
var sb = new StringBuilder();
var t = scan;
N = t[0]; K = t[1];
for (int i = 0; i < N; i++)
{
t = scan;
L.Add(new University(i, t[0], t[1], t[2]));
}
var A = L.OrderByDescending(l => l.S).ToArray();
var d = 0;
var T = A;
L = new HashSet<University>();
while (true)
{
T = A.Skip(d).ToArray();
int cnt = LowerBound(T, T[0].S);
//Console.WriteLine(cnt);
T = T.Take(cnt).ToArray();
d += cnt;
//Console.WriteLine(T.Count()+" "+T[0].S);
var nowU = -1;
T = T.OrderBy(a => C[a.U]).ThenBy(a => a.P).ToArray();
var Q = new Queue<University>();
for (int i = 0; i < cnt; i++)
{
Q.Enqueue(T[i]);
}
while (Q.Any())
{
var g = Q.Dequeue();
if(g.U == nowU)
{
Q.Enqueue(g);
continue;
}
sb.AppendLine(g.Num.ToString());
C[g.U]++;
Counter++;
if(Counter == K)
{
flag = true;
break;
}
}
if (flag)
{
Console.Write(sb);
return;
}
}
}
class University
{
internal int Num, S, P, U;
public University(int Num, int S, int P, int U)
{
this.Num = Num;
this.S = S;
this.P = P;
this.U = U;
}
}
static int LowerBound(University[] arr, int val)
{
int low = 0, high = arr.Count();
int mid;
while (low < high)
{
mid = ((high - low) >> 1) + low;
if (arr[mid].S >= val) low = mid + 1;
else high = mid;
}
return low;
}
static int[] scan { get { return Array.ConvertAll(Console.ReadLine().Split(), int.Parse); } }
}
}