トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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を満たすかを判定してます。