結果
問題 | No.1220 yukipoker |
ユーザー |
![]() |
提出日時 | 2020-09-04 22:12:08 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 403 ms / 2,000 ms |
コード長 | 3,508 bytes |
コンパイル時間 | 899 ms |
コンパイル使用メモリ | 110,336 KB |
実行使用メモリ | 37,632 KB |
最終ジャッジ日時 | 2024-11-26 13:06:20 |
合計ジャッジ時間 | 5,941 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 25 |
コンパイルメッセージ
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;using System.Collections.Generic;using System.Diagnostics;using System.IO;using System.Linq;using System.Numerics;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using static System.Math;using MethodImplAttribute = System.Runtime.CompilerServices.MethodImplAttribute;using MethodImplOptions = System.Runtime.CompilerServices.MethodImplOptions;public static class P{static double[] logs = Enumerable.Range(0, 100010).Select(x => Log(x)).ToArray();static DisjointSparseTable<double> dst = new DisjointSparseTable<double>(logs, (x, y) => x + y);public static void Main(){int q = int.Parse(Console.ReadLine());for (int i = 0; i < q; i++){Solve();}}static void Solve(){var nmk = Console.ReadLine().Split().Select(int.Parse).ToArray();var n = nmk[0];var m = nmk[1];var k = nmk[2];var logF = logs[m] + dst.Query(k + 1, n) - dst.Query(1, n - k);var logS = logs[n - k + 1] + logs[m] * k;//Console.WriteLine($"{logF} {logS}");//Console.WriteLine($"{Exp(logF)} {Exp(logS)}");Console.WriteLine(logF < logS ? "Flush" : "Straight");}}class DisjointSparseTable<T>{public readonly int Size;readonly int Height;readonly T[] Table;readonly Func<T, T, T> Merge;[MethodImpl(MethodImplOptions.AggressiveInlining)]public DisjointSparseTable(T[] data, Func<T, T, T> merge){Size = data.Length;Height = MSBPos(Size) + 1;Table = new T[Size * Height];Merge = merge;data.CopyTo(Table, 0);for (int layer = 1; layer < Height; layer++){int layerOffset = layer * Size;int block = 0;int i;for (; block + 2 <= Size >> layer; block += 2){i = layerOffset + ((block | 1) << layer) - 1; Table[i] = Table[i - layerOffset]; i--;for (; i >= layerOffset + (block << layer); i--) Table[i] = Merge(Table[i - layerOffset], Table[i + 1]);i = layerOffset + ((block | 1) << layer); Table[i] = Table[i - layerOffset]; i++;for (; i < layerOffset + ((block + 2) << layer); i++) Table[i] = Merge(Table[i - 1], Table[i - layerOffset]);}if (((block | 1) << layer) < Size){i = layerOffset + ((block | 1) << layer) - 1; Table[i] = Table[i - layerOffset]; i--;for (; i >= layerOffset + (block << layer); i--) Table[i] = Merge(Table[i - layerOffset], Table[i + 1]);i = layerOffset + ((block | 1) << layer); Table[i] = Table[i - layerOffset]; i++;for (; i < layerOffset + Size; i++) Table[i] = Merge(Table[i - 1], Table[i - layerOffset]);}}}public T Query(int l, int r){if (l > r) return default(T);if (l == r) return Table[l];var layer = MSBPos(l ^ r);return Merge(Table[l + layer * Size], Table[r + layer * Size]);}[MethodImpl(MethodImplOptions.AggressiveInlining)]static int MSBPos(int n){int res = 0;if (0 != (n >> (res | 16))) res |= 16;if (0 != (n >> (res | 8))) res |= 8;if (0 != (n >> (res | 4))) res |= 4;if (0 != (n >> (res | 2))) res |= 2;if (0 != (n >> (res | 1))) res |= 1;return res;}}