典型90問
次の典型90問へ
前の典型90問へ
典型90問 052 Dice Product(★3)
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("1 2 3 5 7 11");
WillReturn.Add("4 6 8 9 10 12");
//1421
}
else if (InputPattern == "Input2") {
WillReturn.Add("1");
WillReturn.Add("11 13 17 19 23 29");
//112
}
else if (InputPattern == "Input3") {
WillReturn.Add("7");
WillReturn.Add("19 23 51 59 91 99");
WillReturn.Add("15 45 56 65 69 94");
WillReturn.Add("7 11 16 34 59 95");
WillReturn.Add("27 30 40 43 83 85");
WillReturn.Add("19 23 25 27 45 99");
WillReturn.Add("27 48 52 53 60 81");
WillReturn.Add("21 36 49 72 82 84");
//670838273
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
const long Hou = 1000000007;
static void Main()
{
List<string> InputList = GetInputList();
long Answer = 1;
foreach (string EachStr in InputList.Skip(1)) {
long[] AArr = EachStr.Split(' ').Select(pX => long.Parse(pX)).ToArray();
long CurrSum = 0;
foreach (long EachA in AArr) {
CurrSum += EachA;
CurrSum %= Hou;
}
Answer *= CurrSum;
Answer %= Hou;
}
Console.WriteLine(Answer);
}
}
解説
1から3までのサイコロと
7から9までのサイコロで考察します。
1*7+1*8+1*9+
2*7+2*8+2*9+
3*7+3*8+3*9
が解ですが
因数分解すると
1*(7+8+9) + 2*(7+8+9) + 3*(7+8+9) =
(1+2+3) * (7+8+9) になります。
サイコロが増えても同様なので、
サイコロ目の総和同士の積が解だと分かります。