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を用意すれば良いと分かります。