トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
京都大プロコン2015 A 東京都
■■■問題■■■
KUPC2015は東京と京都の2箇所でオンサイトが開催されている.
あなたはKUPCの告知を手伝うことにした.
英小文字からなる文字列が印字されたテープがある.
あなたはこのテープを文字同士の間でのみ好きなだけ自由に切ってもよい.
あなたはtokyoかkyotoのいずれかの文字列を含むテープをなるべくたくさん作りたい.
ただし,一旦切ったテープを後でくっつけることはできないものとする.
作る事ができるtokyoもしくはkyotoを含むテープの数の最大値を出力せよ.
■■■入力■■■
T
S1
・
・
・
ST
●1行目にはテストケースの数を表す整数T (1 <= T <= 100) が与えられる.
●続いてT個のテストケースが順に与えられ,
i (1 <= i <= T) 行目には英小文字のみからなる文字列Siが与えられる.
●各文字列の長さは1以上100以下であることが保証される.
■■■出力■■■
出力はT行からなる.各テストケースに対する答えのみを順に出力せよ.
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("3");
WillReturn.Add("higashikyoto");
WillReturn.Add("kupconsitetokyotokyoto");
WillReturn.Add("goodluckandhavefun");
//1
//2
//0
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string[] SArr = InputList.Skip(1).ToArray();
foreach (string EachStr in SArr) {
Console.WriteLine(Regex.Matches(EachStr, "tokyo|kyoto").Count);
}
}
}
解説
tokyoとkyotoの片方でしか使えない文字列なら、その片方で使用することが確定し、
両方で使えるtokyotoのような場合は、左優先で使って問題ないと考察し、
貪欲法を使ってます。