トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.112 ややこしい鶴亀算
■■■問題■■■
N匹の動物がいる。
動物たちは1からNまで番号が振られている。
また、動物たちはそれぞれ鶴か亀のいずれかである。
ご存知の通り、鶴の足は2本、亀の足は4本である。
ある日、動物たちは鶴亀算を勉強することにした。
そのためにまず、動物たちは各自で「全員の足の総本数」を集計した。
しかし、うっかり者の動物たちは皆、自分自身の足を数え忘れてしまった。
あなたの仕事は、以上の集計結果から鶴と亀の匹数を求めることである。
■■■入力■■■
N
a1 a2 ・・・ aN
1行目に、動物たちの匹数 N(2 <= N <= 50) が与えられる。
2行目に、i番目の動物が数えた足の総本数aiが空白区切りで与えられる。
aiは問題制約を満たす値である。
■■■出力■■■
鶴と亀の匹数をこの順に空白区切りで出力せよ。
解はちょうど一つ存在することが保証される。
最後に改行してください。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("2");
WillReturn.Add("2 4");
//1 1
//1番目の動物が亀、2番目の動物が鶴である
}
else if (InputPattern == "Input2") {
WillReturn.Add("3");
WillReturn.Add("4 4 4");
//3 0
//3匹とも鶴である
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int[] AArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
int S = AArr.Sum() / (AArr.Length - 1);
int TuruCnt = 0;
int KameCnt = 0;
foreach (int EachInt in AArr) {
if (S - EachInt == 2) TuruCnt++;
else KameCnt++;
}
Console.WriteLine("{0} {1}", TuruCnt, KameCnt);
}
}
解説
動物が3匹いるとして、足の本数の総和をSとすれば、
a1 = S - 1匹目の動物の足
a2 = S - 2匹目の動物の足
a3 = S - 3匹目の動物の足
となりますので、
右辺の和を求めれば
3S - S
となり、Sを求めることができます。