ARC061C - たくさんの数式

atcoder.jp

入力文字列 S の長さを N として、文字と文字の間に '+' が入るまたは入らないパターンは全部で 2N-1 通り。2N 通りの全探索で有効なビット全探索を使ってみた。

using System;
using System.Collections.Generic;

namespace ARC061C
{
    class Program
    {
        static void Main(string[] args)
        {
            var S = Console.ReadLine();
            var bitLength = S.Length - 1;
            var answer = 0L;
            for (var bit = 0; bit < (1 << bitLength); bit++)
            {
                var buf = new List<char>();
                for (var i = 0; i < S.Length; i++)
                {
                    buf.Add(S[i]);
                    if ((bit & (1 << i)) != 0)
                    {
                        answer += long.Parse(buf.ToArray());
                        buf = new List<char>();
                    }
                }
                if (buf.Count > 0)
                {
                    answer += long.Parse(buf.ToArray());
                }
            }
            Console.WriteLine(answer);
        }
    }
}