結果

問題 No.297 カードの数式
ユーザー AreTrashAreTrash
提出日時 2016-05-03 23:50:31
言語 C#(csc)
(csc 3.9.0)
結果
AC  
実行時間 68 ms / 1,000 ms
コード長 2,397 bytes
コンパイル時間 4,255 ms
コンパイル使用メモリ 110,976 KB
実行使用メモリ 23,756 KB
最終ジャッジ日時 2023-08-26 22:54:01
合計ジャッジ時間 5,582 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 64 ms
23,660 KB
testcase_01 AC 65 ms
19,468 KB
testcase_02 AC 65 ms
21,720 KB
testcase_03 AC 65 ms
23,552 KB
testcase_04 AC 68 ms
21,588 KB
testcase_05 AC 64 ms
21,520 KB
testcase_06 AC 65 ms
21,516 KB
testcase_07 AC 66 ms
23,684 KB
testcase_08 AC 65 ms
21,740 KB
testcase_09 AC 65 ms
23,664 KB
testcase_10 AC 65 ms
21,580 KB
testcase_11 AC 65 ms
21,640 KB
testcase_12 AC 67 ms
23,652 KB
testcase_13 AC 67 ms
23,756 KB
testcase_14 AC 66 ms
21,580 KB
testcase_15 AC 66 ms
23,648 KB
testcase_16 AC 68 ms
21,620 KB
testcase_17 AC 67 ms
21,524 KB
testcase_18 AC 67 ms
23,664 KB
testcase_19 AC 66 ms
23,508 KB
testcase_20 AC 65 ms
21,676 KB
testcase_21 AC 65 ms
21,580 KB
testcase_22 AC 66 ms
21,528 KB
testcase_23 AC 65 ms
21,632 KB
testcase_24 AC 65 ms
21,720 KB
testcase_25 AC 65 ms
21,556 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 No297_1{
    public class Program{
        public static void Main(string[] args){
            Console.ReadLine();
            var cards = Console.ReadLine().Split(' ');

            var nums = new int[10];
            var ops = new int[2];

            foreach(var card in cards){
                if(card.Equals("+"))
                    ops[0]++;
                else if(card.Equals("-"))
                    ops[1]++;
                else
                    nums[int.Parse(card)]++;
            }

            var numCnt = nums.Sum();
            var opCnt = ops.Sum();

            var addList = new List<long>();
            var subList = new List<long>();
            var tmps = new int[10];
            nums.CopyTo(tmps, 0);

            var add = 0L;
            for(var i = 0; i < numCnt - opCnt; i++){
                var index = Array.FindLastIndex(tmps, x => x >= 1);
                add = add * 10 + index;
                tmps[index]--;
            }
            addList.Add(add);

            for(var i = 0; i < ops[0]; i++){
                var index = Array.FindLastIndex(tmps, x => x >= 1);
                addList.Add(index);
                tmps[index]--;
            }

            for(var i = 0; i < ops[1]; i++){
                var index = Array.FindIndex(tmps, x => x >= 1);
                subList.Add(index);
                tmps[index]--;
            }
            Console.Write(addList.Sum() - subList.Sum() + " ");

            if(ops[1] > 0){
                for(var i = 0; i < ops[1]; i++){
                    var max = addList.Max();
                    subList.Add(max);
                    addList.Remove(max);

                    var min = subList.Min();
                    addList.Add(min);
                    subList.Remove(min);
                }
                Console.WriteLine(addList.Sum() - subList.Sum());
            } else{
                var addary = new long[opCnt + 1];
                var cnt = 0;
                for(var i = 0; i < numCnt; i++){
                    cnt = cnt < opCnt ? cnt + 1 : 0;
                    var index = Array.FindIndex(nums, x => x >= 1);
                    addary[cnt] = addary[cnt] * 10 + index;
                    nums[index]--;
                }
                Console.WriteLine(addary.Sum());
            }
        }
    }
}
0