AtCoderの企業コンテスト
次の企業コンテストの問題へ
前の企業コンテストの問題へ
三井住友信託銀行プログラミングコンテスト2019 D Lucky PIN
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("0224");
//3
}
else if (InputPattern == "Input2") {
WillReturn.Add("6");
WillReturn.Add("123123");
//17
}
else if (InputPattern == "Input3") {
WillReturn.Add("19");
WillReturn.Add("3141592653589793238");
//329
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[1];
var KouhoSet = new HashSet<string>();
// 作成可能な文字列のSet
var DPSet = new HashSet<string>();
DPSet.Add("");
foreach (char EachChar in S) {
foreach (string EachStr in DPSet.ToArray()) {
string NewStr = EachStr + EachChar;
if (NewStr.Length == 3) {
KouhoSet.Add(NewStr);
}
else {
DPSet.Add(NewStr);
}
}
}
Console.WriteLine(KouhoSet.Count);
}
}
解説
作成可能な文字列を、DPで求めてます。