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

京都大プロコン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のような場合は、左優先で使って問題ないと考察し、
貪欲法を使ってます。