結果
問題 | No.1739 Princess vs. Dragoness (& AoE) |
ユーザー |
![]() |
提出日時 | 2021-11-13 20:13:13 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 231 ms / 3,000 ms |
コード長 | 3,646 bytes |
コンパイル時間 | 1,269 ms |
コンパイル使用メモリ | 115,496 KB |
実行使用メモリ | 36,864 KB |
最終ジャッジ日時 | 2024-11-27 21:06:13 |
合計ジャッジ時間 | 7,280 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using static System.Math;using System.Collections.Generic;using System;public class PriorityQueue<T> where T : IComparable{private IComparer<T> _comparer = null;private int _type = 0;private T[] _heap;private int _sz = 0;private int _count = 0;public PriorityQueue(int maxSize, IComparer<T> comparer){_heap = new T[maxSize];_comparer = comparer;}public PriorityQueue(int maxSize, int type = 0){_heap = new T[maxSize];_type = type;}private int Compare(T x, T y){if (_comparer != null) return _comparer.Compare(x, y);return _type == 0 ? x.CompareTo(y) : y.CompareTo(x);}public void Push(T x){_count++;var i = _sz++;while (i > 0){var p = (i - 1) / 2;if (Compare(_heap[p], x) <= 0) break;_heap[i] = _heap[p];i = p;}_heap[i] = x;}public T Pop(){_count--;T ret = _heap[0];T x = _heap[--_sz];int i = 0;while (i * 2 + 1 < _sz){int a = i * 2 + 1;int b = i * 2 + 2;if (b < _sz && Compare(_heap[b], _heap[a]) < 0) a = b;if (Compare(_heap[a], x) >= 0) break;_heap[i] = _heap[a];i = a;}_heap[i] = x;return ret;}public int Count() => _count;public T Peek() => _heap[0];public bool Contains(T x){for (int i = 0; i < _sz; i++) if (x.Equals(_heap[i])) return true;return false;}public void Clear(){while (this.Count() > 0) this.Pop();}public IEnumerator<T> GetEnumerator(){var ret = new List<T>();while (this.Count() > 0){ret.Add(this.Pop());}foreach (var r in ret){this.Push(r);yield return r;}}public T[] ToArray(){T[] array = new T[_sz];int i = 0;foreach (var r in this){array[i++] = r;}return array;}}public class Hello{public static int n, a, x;public static long by;static void Main(){string[] line = Console.ReadLine().Trim().Split(' ');n = int.Parse(line[0]);a = int.Parse(line[1]);var b = long.Parse(line[2]);x = int.Parse(line[3]);var y = long.Parse(line[4]);by = b * y;line = Console.ReadLine().Trim().Split(' ');var h = Array.ConvertAll(line, long.Parse);getAns(h);}static void getAns(long[] h){var pq = new PriorityQueue<long>(n + 100, 1);foreach (var z in h) pq.Push(z);var na = a;while (na > 0){if (pq.Count() == 0) break;var w = pq.Pop();var w2 = Max(0, w - x);pq.Push(w2);na--;}var harray = pq.ToArray();getAns2(harray);}static bool calc(long[] harray, long k){var hL = harray.Length;var sum = 0L;for (int i = 0; i < hL; i++) sum += Max(0, harray[i] - k);return by >= sum;}static void getAns2(long[] harray){if (calc(harray, 0)) { Console.WriteLine(0); return; }var ng = 0L;var ok = 1000000000L;while (ok - ng > 1){var mid = ng + (ok - ng) / 2;if (calc(harray, mid)) ok = mid;else ng = mid;}Console.WriteLine(ok);}}