AtCoderのABC    次のABCの問題へ    前のABCの問題へ

ABC251-D At Most 3 (Contestant ver.)


問題へのリンク


C#のソース

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

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("6");
            //3
            //1 2 3
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("12");
            //6
            //2 5 1 2 5 1
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int W = int.Parse(InputList[0]);

        var AnswerList = new List<long>();
        for (long I = 1; I <= 99; I++) {
            AnswerList.Add(I);
        }
        for (long I = 100; I <= 9900; I += 100) {
            AnswerList.Add(I);
        }
        for (long I = 10000; I <= 990000; I += 10000) {
            AnswerList.Add(I);
        }
        Console.WriteLine(AnswerList.Count);
        Console.WriteLine(LongEnumJoin(" ", AnswerList));
    }

    ////////////////////////////////////////////////////////////////
    // セパレータとLong型の列挙を引数として、結合したstringを返す
    ////////////////////////////////////////////////////////////////
    static string LongEnumJoin(string pSeparater, IEnumerable<long> pEnum)
    {
        string[] StrArr = Array.ConvertAll(pEnum.ToArray(), pX => pX.ToString());
        return string.Join(pSeparater, StrArr);
    }
}


解説

1から1000000までを、3つの数の和で網羅すれば良いので、
1000000を3等分して、
100 | 00 | 00
で考えます。

ここで100進数を意識すれば、
各桁で
1から99を用意すれば良いと分かります。