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

No.63 ポッキーゲーム

■■■問題■■■

ハルカちゃんとユウちゃんはとっても仲良しなので、2人でポッキーゲームをすることにしました。

長さが L(mm) のポッキーを2人はそれぞれ両端から中央に向かってかじっていきます。
2人とも毎回 K(mm) ずつ同じタイミングでポッキーをかじります。

ユウちゃんは恥ずかしがり屋さんなので、
次のタイミングで2人ともポッキーをかじろうとしたら唇が触れてしまうと分かった時点で
かじり進めるのを止めて、残りは全部ハルカちゃんが食べてしまいます。

このとき、ユウちゃんが食べるポッキーの長さは何mmか? 

■■■入力■■■

L K


入力 L,K はそれぞれ整数値で与えられる。
1 <= L <= 10の9乗 はゲームに用いるポッキーの長さを表す。
1 <= K <= 50 はお互いが1回にかじるポッキーの長さを表す。
残りのポッキーの長さが0(もしくはそれ以下)で唇が触れるものとする。

■■■出力■■■

ユウちゃんが食べるポッキーの長さを計算し出力せよ。 


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input1";

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

        if (InputPattern == "Input1") {
            WillReturn.Add("90 20");
            //40
            //お互いが3回かじろうとすると唇が触れてしまうので、
            //ユウちゃんは40(mm)食べることになる
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("100 50");
            //0
            //ユウちゃんが1回もかじらないこともある。 
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("1111 11");
            //550
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
        int L = wkArr[0];
        int K = wkArr[1];

        int EatLen = 0;
        while (L > 0) {
            if (L - 2 * K <= 0) break;
            L -= 2 * K;
            EatLen += K;
        }
        Console.WriteLine(EatLen);
    }
}


解説

ナイーブに順番に計算してますが、TLEになりませんでした。