using System; using System.Collections.Generic; public class Program { static void Main() { // 規定文字列 string Y = "yukari"; string A = "akari"; string X = "yuzukizu"; Dictionary costDicY = new Dictionary(); //yukari Dictionary costDicA = new Dictionary(); //akari Dictionary costDicX = new Dictionary(); //yuzukizu Dictionary costDicS = new Dictionary(); // 入力コスト // 最小出現回数 int minYlc; int minAlc; int minXlc; // 各文字毎にコストを定義 makeCostDictionary(ref costDicY, Y); makeCostDictionary(ref costDicA, A); makeCostDictionary(ref costDicX, X); // 入力文字列から各文字コストを算出 string S = Console.ReadLine(); makeCostDictionary(ref costDicS, S); // 最小回数初期化 minYlc = minAlc = minXlc = S.Length; // 文字出現回数をコストよりカウント int count; foreach(var pair in costDicY) { // 存在するなら計測 if(costDicS.ContainsKey(pair.Key)) { count = costDicS[pair.Key] / pair.Value; if(minYlc > count) minYlc = count; }else { // 不成立 minYlc = 0; break; } } // 文字出現回数をコストよりカウント foreach(var pair in costDicA) { // 存在するなら計測 if(costDicS.ContainsKey(pair.Key)) { count = costDicS[pair.Key] / pair.Value; if(minAlc > count) minAlc = count; }else { // 不成立 minAlc = 0; break; } } // 文字出現回数をコストよりカウント foreach(var pair in costDicX) { // 存在するなら計測 if(costDicS.ContainsKey(pair.Key)) { count = costDicS[pair.Key] / pair.Value; if(minXlc > count) minXlc = count; }else { // 不成立 minXlc = 0; break; } } Console.WriteLine($"{minYlc} {minAlc} {minXlc}"); } static void makeCostDictionary(ref Dictionary dic, string costString) { foreach(char c in costString) { // 生成判定 if(!dic.ContainsKey(c))dic.Add(c, 0); //コスト増加 dic[c] += 1; } } }