トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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になりませんでした。