E8本(数学)
次のE8本(数学)の問題へ
前のE8本(数学)の問題へ
E8本(数学) 066 Three Cards
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("3 1");
//24
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long[] wkArr = InputList[0].Split(' ').Select(pX => long.Parse(pX)).ToArray();
long N = wkArr[0];
long K = wkArr[1];
// 補集合の数
long HosyuugouCnt = 0;
// (A,B,C)を全探索
for (long LoopA = 1; LoopA <= N; LoopA++) {
long LoopSta = Math.Max(1, LoopA - K);
long LoopEnd = Math.Min(N, LoopA + K);
for (long LoopB = LoopSta; LoopB <= LoopEnd; LoopB++) {
if (Math.Abs(LoopA - LoopB) >= K) continue;
for (long LoopC = LoopSta; LoopC <= LoopEnd; LoopC++) {
if (Math.Abs(LoopA - LoopC) >= K) continue;
if (Math.Abs(LoopB - LoopC) >= K) continue;
HosyuugouCnt++;
}
}
}
long ZentaiCnt = N * N * N;
long Answer = ZentaiCnt - HosyuugouCnt;
Console.WriteLine(Answer);
}
}
解説
黒色と白色のカードに書かれている整数の差の絶対値は K 以上 または
黒色と灰色のカードに書かれている整数の差の絶対値は K 以上 または
灰色と白色のカードに書かれている整数の差の絶対値は K 以上
上記の否定を、ドモルガンの法則で変形すると下記になります
黒色と白色のカードに書かれている整数の差の絶対値は K 未満 かつ
黒色と灰色のカードに書かれている整数の差の絶対値は K 未満 かつ
灰色と白色のカードに書かれている整数の差の絶対値は K 未満
後は、全体集合から補集合を引けば、解が求まります。