提出 #43098637


ソースコード 拡げる

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Numerics;

namespace Tasks
{
    public class C
    {
        public static void Main()
        {
            using var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
            Console.SetOut(sw);
            Solve();
            Console.Out.Flush();
        }

        public static void Solve()
        {
            var N = Scanner.Scan<int>();
            var P = new Fraction[N];
            for (var i = 0; i < N; i++)
            {
                var (a, b) = Scanner.Scan<long, long>();
                P[i] = new Fraction(a, a + b);
            }

            var H = Enumerable.Range(0, N).ToArray();
            Array.Sort(H, (x, y) =>
            {
                var result = P[y].CompareTo(P[x]);
                return result == 0 ? x.CompareTo(y) : result;
            });

            Console.WriteLine(string.Join(" ", H.Select(x => x + 1)));
        }

        public readonly struct Fraction : IComparable<Fraction>, IEquatable<Fraction>
        {
            public long Y { get; }
            public long X { get; }
            public Fraction(long y, long x)
            {
                static long Gcd(long a, long b) => b == 0 ? a : Gcd(b, a % b);
                var g = Gcd(y, x);
                (Y, X) = (y / g, x / g);
            }
            public static bool operator <(Fraction left, Fraction right) => left.CompareTo(right) < 0;
            public static bool operator <=(Fraction left, Fraction right) => left.CompareTo(right) <= 0;
            public static bool operator >(Fraction left, Fraction right) => left.CompareTo(right) > 0;
            public static bool operator >=(Fraction left, Fraction right) => left.CompareTo(right) >= 0;
            public static bool operator ==(Fraction left, Fraction right) => left.Equals(right);
            public static bool operator !=(Fraction left, Fraction right) => !left.Equals(right);
            public int CompareTo(Fraction other) => (Y * other.X).CompareTo(X * other.Y);
            public bool Equals(Fraction other) => Y == other.Y && X == other.X;
            public override bool Equals(object obj) => obj is Fraction other && Equals(other);
            public override int GetHashCode() => HashCode.Combine(Y, X);
            public override string ToString() => $"{Y}/{X}";
        }

        public static class Scanner
        {
            public static T Scan<T>() where T : IConvertible => Convert<T>(ScanStringArray()[0]);
            public static (T1, T2) Scan<T1, T2>() where T1 : IConvertible where T2 : IConvertible
            {
                var input = ScanStringArray();
                return (Convert<T1>(input[0]), Convert<T2>(input[1]));
            }
            public static (T1, T2, T3) Scan<T1, T2, T3>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible
            {
                var input = ScanStringArray();
                return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]));
            }
            public static (T1, T2, T3, T4) Scan<T1, T2, T3, T4>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible
            {
                var input = ScanStringArray();
                return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]));
            }
            public static (T1, T2, T3, T4, T5) Scan<T1, T2, T3, T4, T5>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible
            {
                var input = ScanStringArray();
                return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]));
            }
            public static (T1, T2, T3, T4, T5, T6) Scan<T1, T2, T3, T4, T5, T6>() where T1 : IConvertible where T2 : IConvertible where T3 : IConvertible where T4 : IConvertible where T5 : IConvertible where T6 : IConvertible
            {
                var input = ScanStringArray();
                return (Convert<T1>(input[0]), Convert<T2>(input[1]), Convert<T3>(input[2]), Convert<T4>(input[3]), Convert<T5>(input[4]), Convert<T6>(input[5]));
            }
            public static IEnumerable<T> ScanEnumerable<T>() where T : IConvertible => ScanStringArray().Select(Convert<T>);
            private static string[] ScanStringArray()
            {
                var line = Console.ReadLine()?.Trim() ?? string.Empty;
                return string.IsNullOrEmpty(line) ? Array.Empty<string>() : line.Split(' ');
            }
            private static T Convert<T>(string value) where T : IConvertible => (T)System.Convert.ChangeType(value, typeof(T));
        }
    }
}

提出情報

提出日時
問題 C - Standings
ユーザ AconCavy
言語 C# (.NET Core 3.1.201)
得点 300
コード長 4972 Byte
結果 AC
実行時間 292 ms
メモリ 53552 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 3
AC × 23
セット名 テストケース
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 83 ms 28088 KiB
00_sample_02.txt AC 75 ms 28056 KiB
00_sample_03.txt AC 80 ms 28104 KiB
01_test_01.txt AC 77 ms 28120 KiB
01_test_02.txt AC 160 ms 48816 KiB
01_test_03.txt AC 249 ms 49960 KiB
01_test_04.txt AC 277 ms 50380 KiB
01_test_05.txt AC 198 ms 50452 KiB
01_test_06.txt AC 217 ms 51352 KiB
01_test_07.txt AC 277 ms 53024 KiB
01_test_08.txt AC 282 ms 53112 KiB
01_test_09.txt AC 292 ms 53264 KiB
01_test_10.txt AC 289 ms 53364 KiB
01_test_11.txt AC 218 ms 53412 KiB
01_test_12.txt AC 254 ms 53552 KiB
01_test_13.txt AC 250 ms 53268 KiB
01_test_14.txt AC 249 ms 53108 KiB
01_test_15.txt AC 206 ms 53552 KiB
01_test_16.txt AC 214 ms 53316 KiB
01_test_17.txt AC 239 ms 53180 KiB
01_test_18.txt AC 234 ms 53060 KiB
01_test_19.txt AC 239 ms 53008 KiB
01_test_20.txt AC 256 ms 53256 KiB