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 未満

後は、全体集合から補集合を引けば、解が求まります。