結果

問題 No.150 "良問"(良問とは言っていない
ユーザー mban
提出日時 2017-01-12 14:28:27
言語 C#
(mono 5.0.1.1)
結果
AC  
実行時間 41 ms
コード長 2184 Byte
コンパイル時間 301 ms
使用メモリ 18696 KB

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
pretest0.txt AC 28 ms
16616 KB
pretest1.txt AC 32 ms
16640 KB
pretest2.txt AC 27 ms
18664 KB
pretest3.txt AC 28 ms
18664 KB
pretest4.txt AC 27 ms
16656 KB
pretest5.txt AC 41 ms
16652 KB
pretest6.txt AC 28 ms
16620 KB
pretest7.txt AC 28 ms
16628 KB
sample.txt AC 31 ms
16624 KB
system_test1.txt AC 31 ms
16636 KB
system_test2.txt AC 31 ms
14588 KB
system_test3.txt AC 31 ms
18696 KB
system_test4.txt AC 32 ms
16660 KB
system_test5.txt AC 33 ms
16644 KB
system_test6.txt AC 37 ms
16636 KB
test1.txt AC 28 ms
16632 KB
test2.txt AC 29 ms
16640 KB
test3.txt AC 32 ms
16668 KB
test4.txt AC 33 ms
18696 KB
test5.txt AC 33 ms
16652 KB
テストケース一括ダウンロード

ソースコード

diff #
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
using System.IO;

class Program
{
    static private Magatro M = new Magatro();
    static private void Main(string[]args)
    {
        M.Scan();
        M.Solve();
    }
}

public class Scanner
{
    private string[] S;
    private int Index;
    private char Separator;

    public Scanner(char separator = ' ')
    {
        Index = 0;
        Separator = separator;
    }

    private string[] Line()
    {
        return Console.ReadLine().Split(Separator);
    }

    public string Next()
    {
        string result;
        if (S == null || Index >= S.Length)
        {
            S = Line();
            Index = 0;
        }
        result = S[Index];
        Index++;
        return result;
    }
    public int NextInt()
    {
        return int.Parse(Next());
    }
    public double NextDouble()
    {
        return double.Parse(Next());
    }
    public long NextLong()
    {
        return long.Parse(Next());
    }
}

public class Magatro
{
    private int T;
    private Scanner Sc = new Scanner();
    private const string good= "good";
    private const string problem = "problem";
    public void Scan()
    {
        T = Sc.NextInt();
    }
    public void Solve()
    {
        for(int i = 0; i < T; i++)
        {
            string S = Sc.Next();
            Console.WriteLine(Anser(S));
        }
    }
    private int Anser(string s)
    {
        int result = int.MaxValue;
        for(int i = 0; i <= s.Length - good.Length - problem.Length; i++)
        {
            for(int j = i + 4; j <= s.Length - problem.Length; j++)
            {
                result = Math.Min(result, Change(s,i,good) + Change(s,j,problem));
            }
        }
        return result;
    }
    private int Change(string s,int index,string b)
    {
        int result = b.Length;
        if (s.Length-index < b.Length) throw new Exception();
        for(int i = 0; i < b.Length; i++)
        {
            if (s[index+i] == b[i]) result--;
        }
        return result;
    }
}
0