結果
問題 | No.1328 alligachi-problem |
ユーザー | fairy_lettuce |
提出日時 | 2020-12-25 01:05:01 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 394 ms / 2,000 ms |
コード長 | 10,761 bytes |
コンパイル時間 | 3,325 ms |
コンパイル使用メモリ | 121,400 KB |
実行使用メモリ | 47,712 KB |
最終ジャッジ日時 | 2024-09-21 17:18:34 |
合計ジャッジ時間 | 14,069 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 40 ms
27,620 KB |
testcase_01 | AC | 36 ms
27,604 KB |
testcase_02 | AC | 39 ms
25,908 KB |
testcase_03 | AC | 36 ms
27,596 KB |
testcase_04 | AC | 41 ms
25,796 KB |
testcase_05 | AC | 41 ms
25,572 KB |
testcase_06 | AC | 38 ms
25,648 KB |
testcase_07 | AC | 42 ms
27,860 KB |
testcase_08 | AC | 38 ms
25,688 KB |
testcase_09 | AC | 370 ms
45,540 KB |
testcase_10 | AC | 301 ms
34,904 KB |
testcase_11 | AC | 368 ms
47,588 KB |
testcase_12 | AC | 378 ms
47,564 KB |
testcase_13 | AC | 373 ms
47,596 KB |
testcase_14 | AC | 382 ms
47,592 KB |
testcase_15 | AC | 303 ms
36,968 KB |
testcase_16 | AC | 382 ms
47,464 KB |
testcase_17 | AC | 375 ms
45,644 KB |
testcase_18 | AC | 378 ms
45,568 KB |
testcase_19 | AC | 394 ms
47,712 KB |
testcase_20 | AC | 372 ms
47,476 KB |
testcase_21 | AC | 375 ms
45,672 KB |
testcase_22 | AC | 363 ms
45,528 KB |
testcase_23 | AC | 305 ms
34,788 KB |
testcase_24 | AC | 310 ms
40,040 KB |
testcase_25 | AC | 317 ms
40,172 KB |
testcase_26 | AC | 346 ms
44,700 KB |
testcase_27 | AC | 354 ms
45,032 KB |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;using System.IO;using System.Collections.Generic;using System.Linq;using System.Numerics;using System.Runtime.CompilerServices;using System.Text;using System.Globalization;using System.Threading;using static System.Math;namespace FertiLib.Contest.E{public class Solver{Scanner cin;StreamWriter cout;bool isMultipleTestCases = false;public void Solve(){var n = cin.ReadInt();var (c, x, y) = cin.ReadValueArray<char, char, int>(n);var red = c.Count(p => p == 'R');var blue = n - red;var balls = Enumerable.Repeat(0, 4).Select(_ => new List<(int y, int index)>()).ToArray();for (var i = 0; i < n; i++){var t = 0;if (c[i] == 'B') t += 2;if (x[i] == 'B') t += 1;balls[t].Add((y[i], i));}for (var i = 0; i < 4; i++){balls[i].Sort();}var ansR = new List<(bool isBlue, int index)>();var ansB = new List<(bool isRed, int index)>();int p = 0;for (var i = 0; i < balls[0].Count; i++){while (p < balls[1].Count && ansR.Count < balls[0][i].y){ansR.Add((true, balls[1][p++].index));}if (ansR.Count != balls[0][i].y){Console.WriteLine("No");return;}ansR.Add((false, balls[0][i].index));}while (p < balls[1].Count){ansR.Add((true, balls[1][p++].index));}p = 0;for (var i = 0; i < balls[3].Count; i++){while (p < balls[2].Count && ansB.Count < balls[3][i].y){ansB.Add((true, balls[2][p++].index));}if (ansB.Count != balls[3][i].y){Console.WriteLine("No");return;}ansB.Add((false, balls[3][i].index));}while (p < balls[2].Count){ansB.Add((true, balls[2][p++].index));}var ans = new List<int>();var rp = red;var bp = blue;var rbp = balls[1].Count;var brp = balls[2].Count;while (rp > 0 || bp > 0){if (rp > 0 && ansR[rp - 1].isBlue && y[ansR[rp - 1].index] == bp){ans.Add(ansR[--rp].index);rbp--;continue;}if (bp > 0 && ansB[bp - 1].isRed && y[ansB[bp - 1].index] == rp){ans.Add(ansB[--bp].index);brp--;continue;}if (rp > 0 && !ansR[rp - 1].isBlue && (brp == 0 || rp > balls[2][brp - 1].y)){ans.Add(ansR[--rp].index);continue;}if (bp > 0 && !ansB[bp - 1].isRed && (rbp == 0 || bp > balls[1][rbp - 1].y)){ans.Add(ansB[--bp].index);continue;}Console.WriteLine("No");return;}ans.Reverse();Console.WriteLine("Yes");Console.WriteLine(ans.Select(p => p + 1).Join(" "));}public Solver(Scanner cin, StreamWriter cout){this.cin = cin;this.cout = cout;}public void Start(){int _t = 1;if (isMultipleTestCases) _t = cin.ReadInt();while (_t-- > 0) Solve();}public static void YESNO(bool condition) => Console.WriteLine(condition ? "YES" : "NO");public static void YesNo(bool condition) => Console.WriteLine(condition ? "Yes" : "No");public static void yesno(bool condition) => Console.WriteLine(condition ? "yes" : "no");}public static class Program{public static void Main(string[] args){var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };Console.SetOut(sw);var cin = new Scanner();var solver = new Solver(cin, sw);solver.Start();Console.Out.Flush();}}public static class Extention{public static string Join<T>(this IEnumerable<T> x, string separator = "") => string.Join(separator, x);public static int UpperBound<T>(this IList<T> list, T value) => list.BinarySearch(value, true, 0, list.Count, Comparer<T>.Default);public static int LowerBound<T>(this IList<T> list, T value) => list.BinarySearch(value, false, 0, list.Count, Comparer<T>.Default);public static int BinarySearch<T>(this IList<T> list, T value, bool isUpperBound, int index, int length, Comparer<T> comparer){var ng = index - 1;var ok = index + length;while (ok - ng > 1){var mid = ng + (ok - ng) / 2;var res = comparer.Compare(list[mid], value);if (res < 0 || (isUpperBound && res == 0)) ng = mid;else ok = mid;}return ok;}public static bool Chmax<T>(ref this T a, T b) where T : struct, IComparable<T>{if (a.CompareTo(b) >= 0) return false;a = b;return true;}public static bool Chmin<T>(ref this T a, T b) where T : struct, IComparable<T>{if (a.CompareTo(b) <= 0) return false;a = b;return true;}}public class Scanner{string[] s;int i;char[] separator = new char[] { ' ' };public Scanner(){s = new string[0];i = 0;}public string Read() => ReadString();public string ReadString(){if (i < s.Length) return s[i++];string st = Console.ReadLine();while (st == "") st = Console.ReadLine();s = st.Split(separator, StringSplitOptions.RemoveEmptyEntries);if (s.Length == 0) return ReadString();i = 0;return s[i++];}public string[] ReadStringArray(int N){string[] Array = new string[N];for (int i = 0; i < N; i++){Array[i] = ReadString();}return Array;}public int ReadInt() => int.Parse(ReadString());public int[] ReadIntArray(int N, int add = 0){int[] Array = new int[N];for (int i = 0; i < N; i++){Array[i] = ReadInt() + add;}return Array;}public long ReadLong() => long.Parse(ReadString());public long[] ReadLongArray(int N, long add = 0){long[] Array = new long[N];for (int i = 0; i < N; i++){Array[i] = ReadLong() + add;}return Array;}public double ReadDouble() => double.Parse(ReadString());public double[] ReadDoubleArray(int N, double add = 0){double[] Array = new double[N];for (int i = 0; i < N; i++){Array[i] = ReadDouble() + add;}return Array;}public T1 ReadValue<T1>() => (T1)Convert.ChangeType(ReadString(), typeof(T1));public (T1, T2) ReadValue<T1, T2>(){var inputs = ReadStringArray(2);var v1 = (T1)Convert.ChangeType(inputs[0], typeof(T1));var v2 = (T2)Convert.ChangeType(inputs[1], typeof(T2));return (v1, v2);}public (T1, T2, T3) ReadValue<T1, T2, T3>(){var inputs = ReadStringArray(3);var v1 = (T1)Convert.ChangeType(inputs[0], typeof(T1));var v2 = (T2)Convert.ChangeType(inputs[1], typeof(T2));var v3 = (T3)Convert.ChangeType(inputs[2], typeof(T3));return (v1, v2, v3);}public (T1, T2, T3, T4) ReadValue<T1, T2, T3, T4>(){var inputs = ReadStringArray(4);var v1 = (T1)Convert.ChangeType(inputs[0], typeof(T1));var v2 = (T2)Convert.ChangeType(inputs[1], typeof(T2));var v3 = (T3)Convert.ChangeType(inputs[2], typeof(T3));var v4 = (T4)Convert.ChangeType(inputs[3], typeof(T4));return (v1, v2, v3, v4);}public (T1, T2, T3, T4, T5) ReadValue<T1, T2, T3, T4, T5>(){var inputs = ReadStringArray(5);var v1 = (T1)Convert.ChangeType(inputs[0], typeof(T1));var v2 = (T2)Convert.ChangeType(inputs[1], typeof(T2));var v3 = (T3)Convert.ChangeType(inputs[2], typeof(T3));var v4 = (T4)Convert.ChangeType(inputs[3], typeof(T4));var v5 = (T5)Convert.ChangeType(inputs[4], typeof(T5));return (v1, v2, v3, v4, v5);}public (T1, T2, T3, T4, T5, T6) ReadValue<T1, T2, T3, T4, T5, T6>(){var inputs = ReadStringArray(6);var v1 = (T1)Convert.ChangeType(inputs[0], typeof(T1));var v2 = (T2)Convert.ChangeType(inputs[1], typeof(T2));var v3 = (T3)Convert.ChangeType(inputs[2], typeof(T3));var v4 = (T4)Convert.ChangeType(inputs[3], typeof(T4));var v5 = (T5)Convert.ChangeType(inputs[4], typeof(T5));var v6 = (T6)Convert.ChangeType(inputs[5], typeof(T6));return (v1, v2, v3, v4, v5, v6);}public (T1, T2, T3, T4, T5, T6, T7) ReadValue<T1, T2, T3, T4, T5, T6, T7>(){var inputs = ReadStringArray(7);var v1 = (T1)Convert.ChangeType(inputs[0], typeof(T1));var v2 = (T2)Convert.ChangeType(inputs[1], typeof(T2));var v3 = (T3)Convert.ChangeType(inputs[2], typeof(T3));var v4 = (T4)Convert.ChangeType(inputs[3], typeof(T4));var v5 = (T5)Convert.ChangeType(inputs[4], typeof(T5));var v6 = (T6)Convert.ChangeType(inputs[5], typeof(T6));var v7 = (T7)Convert.ChangeType(inputs[6], typeof(T7));return (v1, v2, v3, v4, v5, v6, v7);}public T1[] ReadValueArray<T1>(int N){var v1 = new T1[N];for (int i = 0; i < N; i++){v1[i] = ReadValue<T1>();}return v1;}public (T1[], T2[]) ReadValueArray<T1, T2>(int N){var (v1, v2) = (new T1[N], new T2[N]);for (int i = 0; i < N; i++){var (t1, t2) = ReadValue<T1, T2>();v1[i] = t1;v2[i] = t2;}return (v1, v2);}public (T1[], T2[], T3[]) ReadValueArray<T1, T2, T3>(int N){var (v1, v2, v3) = (new T1[N], new T2[N], new T3[N]);for (int i = 0; i < N; i++){var (t1, t2, t3) = ReadValue<T1, T2, T3>();v1[i] = t1;v2[i] = t2;v3[i] = t3;}return (v1, v2, v3);}public (T1[], T2[], T3[], T4[]) ReadValueArray<T1, T2, T3, T4>(int N){var (v1, v2, v3, v4) = (new T1[N], new T2[N], new T3[N], new T4[N]);for (int i = 0; i < N; i++){var (t1, t2, t3, t4) = ReadValue<T1, T2, T3, T4>();v1[i] = t1;v2[i] = t2;v3[i] = t3;v4[i] = t4;}return (v1, v2, v3, v4);}public (T1[], T2[], T3[], T4[], T5[]) ReadValueArray<T1, T2, T3, T4, T5>(int N){var (v1, v2, v3, v4, v5) = (new T1[N], new T2[N], new T3[N], new T4[N], new T5[N]);for (int i = 0; i < N; i++){var (t1, t2, t3, t4, t5) = ReadValue<T1, T2, T3, T4, T5>();v1[i] = t1;v2[i] = t2;v3[i] = t3;v4[i] = t4;v5[i] = t5;}return (v1, v2, v3, v4, v5);}public (T1[], T2[], T3[], T4[], T5[], T6[]) ReadValueArray<T1, T2, T3, T4, T5, T6>(int N){var (v1, v2, v3, v4, v5, v6) = (new T1[N], new T2[N], new T3[N], new T4[N], new T5[N], new T6[N]);for (int i = 0; i < N; i++){var (t1, t2, t3, t4, t5, t6) = ReadValue<T1, T2, T3, T4, T5, T6>();v1[i] = t1;v2[i] = t2;v3[i] = t3;v4[i] = t4;v5[i] = t5;v6[i] = t6;}return (v1, v2, v3, v4, v5, v6);}public (T1[], T2[], T3[], T4[], T5[], T6[], T7[]) ReadValueArray<T1, T2, T3, T4, T5, T6, T7>(int N){var (v1, v2, v3, v4, v5, v6, v7) = (new T1[N], new T2[N], new T3[N], new T4[N], new T5[N], new T6[N], new T7[N]);for (int i = 0; i < N; i++){var (t1, t2, t3, t4, t5, t6, t7) = ReadValue<T1, T2, T3, T4, T5, T6, T7>();v1[i] = t1;v2[i] = t2;v3[i] = t3;v4[i] = t4;v5[i] = t5;v6[i] = t6;v7[i] = t7;}return (v1, v2, v3, v4, v5, v6, v7);}}}