結果

問題 No.233 めぐるはめぐる (3)
ユーザー nokonokonokonoko
提出日時 2015-07-02 22:51:26
言語 C#(csc)
(csc 3.9.0)
結果
WA  
実行時間 -
コード長 6,121 bytes
コンパイル時間 719 ms
コンパイル使用メモリ 109,440 KB
実行使用メモリ 28,928 KB
最終ジャッジ日時 2024-07-07 22:24:30
合計ジャッジ時間 4,558 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 226 ms
28,672 KB
testcase_01 AC 152 ms
27,392 KB
testcase_02 AC 96 ms
24,192 KB
testcase_03 AC 180 ms
27,264 KB
testcase_04 AC 223 ms
28,928 KB
testcase_05 AC 225 ms
28,800 KB
testcase_06 AC 221 ms
28,800 KB
testcase_07 AC 25 ms
18,688 KB
testcase_08 AC 25 ms
18,944 KB
testcase_09 AC 32 ms
19,584 KB
testcase_10 AC 33 ms
19,328 KB
testcase_11 WA -
testcase_12 AC 158 ms
27,264 KB
testcase_13 AC 274 ms
28,672 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
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)
            {
                string[] nameList = new string[inputValue];
                for (int i = 0; i < inputValue; i++)
                {
                    nameList[i] = Console.ReadLine();
                    string nowName = nameList[i];
                    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);
                            bool isVowel = IsVowel(buffer[j]);
                            foreach (char charBuffer in charctorCheckList.Keys)
                            {
                                if ((isVowel == IsVowel(charBuffer)) && (!(charctorCheckList[charBuffer].ContainsKey(j))))
                                {
                                    charctorCheckList[charBuffer].Add(j, 0);
                                }
                            }
                        }
                    }
                }
                int generatedNameCount = targetNameArrayCount + plusValue;
                for (int i = 0; i < maxValue; i++)
                {
                    char[] generatedName = new char[generatedNameCount];
                    bool[] usedFlag = new bool[generatedNameCount];
                    foreach (char buffer in charctorCheckList.Keys)
                    {
                        int useCount = charactorList[buffer];
                        int j = 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;
                                charctorCheckList[buffer][sortedBuffer.Key]++;
                                j++;
                                if (j >= useCount)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    string answer = (new String(generatedName)).Replace("=", "");
                    if (!(nameList.Contains(answer)))
                    {
                        Console.WriteLine("{0}", answer);
                        break;
                    }
                }
            }
            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