トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

CODE FESTIVAL 2016予選C A CF

■■■問題■■■

このコンテストの名前はCODEFESTIVALで、
いくつかの文字を消すとCFという文字列にすることが出来ます。

好奇心旺盛な高橋君は、他の文字列に対してもこのようにCFを得られるか気になりました。

英大文字アルファベットからなる文字列sが与えられるので、
sからいくつかの文字を消してCFという文字列にすることが出来るか判定してください。

■■■入力■■■

s

●2 <= |s| <= 100
●sは英大文字(A-Z)のみからなる文字列である

■■■出力■■■

sからいくつかの文字を消してCFという文字列にすることが出来るならYesを、
そうでないならNoを出力せよ。


C#のソース

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("CODEFESTIVAL");
            //Yes
            //1文字目のCと5文字目のFを残して消すことでCFが得られます
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("FESTIVALCODE");
            //No
            //FCなら得ることが出来ますが、
            //文字の順番を変えることは出来ないので、
            //この場合はCFを作ることが出来ません。
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("CF");
            //Yes
            //一文字も消さないこともありえます
        }
        else if (InputPattern == "Input4") {
            WillReturn.Add("FCF");
            //Yes
            //1文字目を消すことで得られます
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string S = InputList[0];

        Console.WriteLine(Regex.IsMatch(S, "C.*F") ? "Yes" : "No");
    }
}


解説

正規表現のC.*Fを満たすかを判定してます。