トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ABC-070-B Two Switches

■■■問題■■■

AliceとBobは、ロボットを制御するためのスイッチを1つずつ持っており、ロボットを動かしています。

Aliceはロボットを動かし始めてA秒後にスイッチを押し始め、
ロボットを動かし始めてB秒後にスイッチを離しました。

Bobはロボットを動かし始めてC秒後にスイッチを押し始め、
ロボットを動かし始めてD秒後にスイッチを離しました。

AliceとBobが、二人ともスイッチを押していた秒数を求めてください。

■■■入力■■■

A B C D

●0 <= A < B <= 100
●0 <= C < D <= 100
●入力は全て整数である

■■■出力■■■

AliceとBobが二人ともスイッチを押していた秒数を出力せよ。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input1";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("0 75 25 100");
            //50
            //ロボットを動し始めて0秒後から75秒後までの間、Aliceはスイッチを押していました。
            //一方、ロボットを動し始めて25秒後から100秒後までの間、Bobはスイッチを押していました。
            //したがって、二人が同時にスイッチを押していた時間は、
            //ロボットを動し始めて25秒後から75秒後までの50秒です。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("0 33 66 99");
            //0
            //AliceとBobが同時にスイッチを押していないので、答えは0秒です
        }
        else if (InputPattern == "Input3") {
            WillReturn.Add("10 90 20 80");
            //60
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
        int A = wkArr[0];
        int B = wkArr[1];
        int C = wkArr[2];
        int D = wkArr[3];

        int DupSec = 0;
        for (int I = A; I <= B; I++) {
            if (C <= I && I <= D) {
                DupSec++;
            }
        }
        if (DupSec == 0) Console.WriteLine(0);
        else Console.WriteLine(DupSec - 1);
    }
}


解説

スイッチを共通で押してる時間を、ナイーブに調べてます。