結果

問題 No.233 めぐるはめぐる (3)
ユーザー nokonokonokonoko
提出日時 2015-06-30 11:57:20
言語 C#(csc)
(csc 3.9.0)
結果
WA  
実行時間 -
コード長 5,150 bytes
コンパイル時間 2,740 ms
コンパイル使用メモリ 109,396 KB
実行使用メモリ 30,308 KB
最終ジャッジ日時 2023-09-22 04:37:37
合計ジャッジ時間 9,269 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 AC 208 ms
26,004 KB
testcase_02 WA -
testcase_03 WA -
testcase_04 AC 287 ms
26,084 KB
testcase_05 AC 282 ms
28,104 KB
testcase_06 AC 280 ms
26,296 KB
testcase_07 AC 63 ms
21,604 KB
testcase_08 AC 64 ms
21,588 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 AC 210 ms
26,164 KB
testcase_13 WA -
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #

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

namespace YukiCoderNo233
{
    class Program
    {
        static void Main()
        {
            string targetName = "inabameguru";
            char[] targetNameArray = targetName.ToCharArray();
            int targetNameArrayCount = targetNameArray.Count();
            Dictionary<char, int> charactorList = new Dictionary<char, int>();
            Dictionary<char, Dictionary<int, int>> charctorCheckList = new Dictionary<char, Dictionary<int, int>>();

            int vowelCount = 0;
            int consonantCount = 0;
            int plusValue = 0;

            for (int i = 0; i < targetNameArrayCount; i++)
            {
                char buffer = targetNameArray[i];
                if (IsVowel(buffer))
                {
                    vowelCount++;
                }
                else
                {
                    consonantCount++;
                }
                if (charactorList.ContainsKey(buffer))
                {
                    charactorList[buffer]++;
                }
                else
                {
                    charactorList.Add(buffer, 1);
                    charctorCheckList.Add(buffer, new Dictionary<int, int>());
                }
            }
            if (vowelCount > consonantCount)
            {
                plusValue = vowelCount - consonantCount;
                consonantCount += plusValue;
                charactorList.Add('=', plusValue);
                charctorCheckList.Add('=', new Dictionary<int, int>());
            }
            int maxValue = GetFactorialValue(vowelCount) * GetFactorialValue(consonantCount);
            foreach (int buffer in charactorList.Values)
            {
                maxValue /= GetFactorialValue(buffer);
            }
            int inputValue = int.Parse(Console.ReadLine());
            if (inputValue < maxValue)
            {
                for (int i = 0; i < inputValue; i++)
                {
                    string nowName = Console.ReadLine();
                    int nowTargetNameArrayCount = targetNameArrayCount;
                    if (IsVowel(nowName[0]))
                    {
                        nowName = "=" + nowName;
                        nowTargetNameArrayCount++;
                    }
                    for (int j = 1; j < nowTargetNameArrayCount; j++)
                    {
                        if (IsVowel(nowName[j]) && (IsVowel(nowName[j - 1])))
                        {
                            nowName = nowName.Insert(j, "=");
                            j++;
                            nowTargetNameArrayCount++;
                        }
                    }
                    char[] buffer = nowName.ToCharArray();
                    for (int j = 0; j < nowTargetNameArrayCount; j++)
                    {
                        Dictionary<int, int> targetCharactorInfo = charctorCheckList[buffer[j]];
                        if (targetCharactorInfo.ContainsKey(j))
                        {
                            targetCharactorInfo[j]++;
                        }
                        else
                        {
                            targetCharactorInfo.Add(j, 1);
                        }
                    }
                }
                int generatedNameCount = targetNameArrayCount + plusValue;
                char[] generatedName = new char[generatedNameCount];
                bool[] usedFlag = new bool[generatedNameCount];
                foreach (char buffer in charctorCheckList.Keys)
                {
                    int useCount = charactorList[buffer];
                    int i = 0;
                    var sortedList = charctorCheckList[buffer].OrderBy(value => value.Value);
                    foreach (var sortedBuffer in sortedList)
                    {
                        if (usedFlag[sortedBuffer.Key] == false)
                        {
                            usedFlag[sortedBuffer.Key] = true;
                            generatedName[sortedBuffer.Key] = buffer;
                            i++;
                            if (i >= useCount)
                            {
                                break;
                            }
                        }
                    }
                }
                string answer = new String(generatedName);
                Console.WriteLine("{0}", answer.Replace("=", ""));
            }
            else
            {
                Console.WriteLine("NO");
            }
        }
        private static bool IsVowel(char targetCharactor)
        {
            bool ret = false;
            if ((targetCharactor == 'a') || (targetCharactor == 'i') || (targetCharactor == 'u') || (targetCharactor == 'e') || (targetCharactor == 'o'))
            {
                ret = true;
            }
            return ret;
        }
        private static int GetFactorialValue(int number)
        {
            int ret = 1;

            for (int i = number; i > 1; i--)
            {
                ret *= i;
            }
            return ret;
        }
    }
}
0