結果

問題 No.4 おもりと天秤
ユーザー TaK7907TaK7907
提出日時 2017-12-05 01:24:59
言語 C#(csc)
(csc 3.9.0)
結果
AC  
実行時間 215 ms / 5,000 ms
コード長 1,258 bytes
コンパイル時間 2,229 ms
コンパイル使用メモリ 104,732 KB
実行使用メモリ 23,836 KB
最終ジャッジ日時 2023-09-08 17:36:38
合計ジャッジ時間 5,549 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 64 ms
23,720 KB
testcase_01 AC 63 ms
23,708 KB
testcase_02 AC 65 ms
21,612 KB
testcase_03 AC 64 ms
23,836 KB
testcase_04 AC 65 ms
21,704 KB
testcase_05 AC 186 ms
21,756 KB
testcase_06 AC 66 ms
23,824 KB
testcase_07 AC 172 ms
21,620 KB
testcase_08 AC 64 ms
21,620 KB
testcase_09 AC 66 ms
23,708 KB
testcase_10 AC 215 ms
21,712 KB
testcase_11 AC 67 ms
23,664 KB
testcase_12 AC 64 ms
21,804 KB
testcase_13 AC 64 ms
21,644 KB
testcase_14 AC 63 ms
21,636 KB
testcase_15 AC 63 ms
21,624 KB
testcase_16 AC 65 ms
21,632 KB
testcase_17 AC 64 ms
21,756 KB
testcase_18 AC 203 ms
21,708 KB
testcase_19 AC 151 ms
19,564 KB
testcase_20 AC 128 ms
21,700 KB
testcase_21 AC 143 ms
21,752 KB
testcase_22 AC 136 ms
23,796 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #

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

namespace yuki0004 {
    public class Program {
        static internal string Solve(System.IO.TextReader reader) {
            var n = int.Parse( reader.ReadLine() );
            var w = reader.ReadLine().Split().ToList().ConvertAll( int.Parse )
                .OrderByDescending( x => x ).ToList();
            const string POSSIBLE = "possible";
            const string IMPOSSIBLE = "impossible";
            if (w.Sum() % 2 == 1) return IMPOSSIBLE;
            var goal = w.Sum() / 2;
            var queue = new Queue<int>();
            queue.Enqueue( w[ 0 ] );
            queue.Enqueue( -1 );

            for (var i = 1; i != w.Count(); ++i) {
                while (true) {
                    var s = queue.Dequeue();
                    queue.Enqueue( s );
                    if (s == -1) break;
                    if (s == goal || s + w[ i ] == goal) return POSSIBLE;
                    else if (s + w[ i ] < goal && !queue.Contains( s + w[ i ] )) queue.Enqueue( s + w[ i ] );
                }
            }
            return IMPOSSIBLE;
        }

        static void Main(string[] args) {
            Console.WriteLine( Solve( System.Console.In ) );
        }
    }
}
0