トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.80 四角形を描こう
■■■問題■■■
A君は四角形を描こうとしています。
描く四角形は正方形か長方形でなければなりません。
また、どの辺の長さも整数cmでなければなりません。
A君の持っている鉛筆はあとちょうどDcmしか線が引けなさそうです。
A君が描ける最も大きな四角形の面積を答えなさい。
なお、四角形が描けないときの面積は0とせよ。
■■■入力■■■
D
DはA君が引ける線の長さです。(0 <= D <= 1万)
■■■出力■■■
A君が描ける最も大きな四角形の面積を1行で出力せよ。
最後に改行を忘れずに。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input5";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("14");
//12
//最も大きい四角形は横4cm、縦3cmの長方形です。
//面積は4×3なので12が答えです。
}
else if (InputPattern == "Input2") {
WillReturn.Add("15");
//12
//サンプル1と同じです。
//A君は鉛筆を使い切らないといけないわけではありません。
}
else if (InputPattern == "Input3") {
WillReturn.Add("16");
//16
//1辺が4cmの正方形が描けます。面積は16です
}
else if (InputPattern == "Input4") {
WillReturn.Add("3");
//0
//四角形が描けないときの面積は0です
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int D = int.Parse(InputList[0]);
int MaxMenseki = 0;
for (int X = 1; X * 2 <= D; X++) {
for (int Y = X; X * 2 + Y * 2 <= D; Y++) {
int Memseki = X * Y;
if (MaxMenseki < Memseki)
MaxMenseki = Memseki;
}
}
Console.WriteLine(MaxMenseki);
}
}
解説
TLEにならないと思われる制約なので、
X >= Y な長方形として、ナイーブに解いてます。