AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC324-D Square Permutation
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("4");
WillReturn.Add("4320");
//2
}
else if (InputPattern == "Input2") {
WillReturn.Add("3");
WillReturn.Add("010");
//2
}
else if (InputPattern == "Input3") {
WillReturn.Add("13");
WillReturn.Add("8694027811503");
//840
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[1];
string SortedS = new string(S.ToCharArray().OrderByDescending(pX => pX).ToArray());
long LimitVal = long.Parse(SortedS);
var HeihousuuSet = new HashSet<long>();
for (long I = 0; I * I <= LimitVal; I++) {
HeihousuuSet.Add(I * I);
}
long Answer = 0;
foreach (long EachLong in HeihousuuSet) {
string StrVal = EachLong.ToString();
if (StrVal.Length < S.Length) {
StrVal = StrVal.PadLeft(S.Length, '0');
}
// マルチセットな集合として一致すること
char[] CharArr = StrVal.OrderByDescending(pX => pX).ToArray();
if (CharArr.SequenceEqual(SortedS)) {
Answer++;
}
}
Console.WriteLine(Answer);
}
}
解説
31415926535000
を並べ替えて平方数にできるかを考えると
31415926535000以下の平方数を列挙し、
それぞれについて、
並べ替えで作成できるかを調べれば良いと分かります。