結果

問題 No.90 品物の並び替え
コンテスト
ユーザー 抹茶アイス
提出日時 2023-07-28 16:30:53
言語 C#
(.NET 10.0.201)
コンパイル:
dotnet_c
実行:
/usr/bin/dotnet_wrap
結果
TLE  
実行時間 -
コード長 2,128 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 12,834 ms
コンパイル使用メモリ 174,408 KB
実行使用メモリ 97,720 KB
最終ジャッジ日時 2026-04-22 07:03:00
合計ジャッジ時間 33,313 ms
ジャッジサーバーID
(参考情報)
judge2_1 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 7 TLE * 2
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (117 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net10.0/main.dll
  main -> /home/judge/data/code/bin/Release/net10.0/publish/

ソースコード

diff #
raw source code

using System;
using System.Collections.Generic;
using System.Linq;

namespace yukicoder
{
    public class Program
    {
        public static void Main()
        {
            var n = Console.ReadLine().Split(' ').Select(value => int.Parse(value)).ToArray();
            var S = new string[n[1]][];
            for (var i = 0; i < n[1]; i++)
            {
                S[i] = Console.ReadLine().Split(' ');
            }
            var A = AllPermutation(Enumerable.Range(0, n[0]).ToArray());
            var m = 0;
            foreach (var aa in A)
            {
                var a = String.Join("", aa);
                var k = 0;
                foreach (var s in S)
                {
                    if (a.IndexOf(s[0]) < a.IndexOf(s[1]))
                    {
                        k += int.Parse(s[2]);
                    }
                }
                m = Math.Max(m, k);
            }
            Console.WriteLine(m);
        }
        static List<T[]> AllPermutation<T>(params T[] array) where T : IComparable
        {
            var a = new List<T>(array).ToArray();
            var res = new List<T[]>();
            res.Add(new List<T>(a).ToArray());
            var n = a.Length;
            var next = true;
            while (next)
            {
                next = false;

                // 1
                int i;
                for (i = n - 2; i >= 0; i--)
                {
                    if (a[i].CompareTo(a[i + 1]) < 0) break;
                }
                // 2
                if (i < 0) break;

                // 3
                var j = n;
                do
                {
                    j--;
                } while (a[i].CompareTo(a[j]) > 0);

                if (a[i].CompareTo(a[j]) < 0)
                {
                    // 4
                    var tmp = a[i];
                    a[i] = a[j];
                    a[j] = tmp;
                    Array.Reverse(a, i + 1, n - i - 1);
                    res.Add(new List<T>(a).ToArray());
                    next = true;
                }
            }
            return res;
        }
    }
}
0