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

ABC-037-B 編集

■■■問題■■■

長さNの数列 {ai} があります。最初、この数列の全ての要素は0です。
この数列に対し、計Q回次の操作を入力で与えられた順に行ってください。

●数列のLi番目からRi番目 (両端を含む) をTiに書き換える。
  ただし、数列の最初の要素が1番目である。

最終的に数列の各値が何になったかを求めてください。

■■■入力■■■

N Q
L1 R1 T1
・
・
・
LQ RQ TQ

●1 <= N <= 100
●1 <= Q <= 100
●1 <= Li <= Ri <= N
●1 <= Ti <= 10億
●Ti は整数である。

■■■出力■■■

出力はN行からなる。上からi行目に操作後の 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("5 2");
            WillReturn.Add("1 3 10");
            WillReturn.Add("2 4 20");
            //10
            //20
            //20
            //20
            //0
            //最初、数列は {0,0,0,0,0} です。
            //1回目の操作の後、数列は {10,10,10,0,0} となります。
            //2回目の操作の後、数列は {10,20,20,20,0} となります。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("10 4");
            WillReturn.Add("2 7 22");
            WillReturn.Add("3 5 4");
            WillReturn.Add("6 10 1");
            WillReturn.Add("4 4 12");
            //0
            //22
            //4
            //12
            //4
            //1
            //1
            //1
            //1
            //1
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();

        int[] wkArr = { };
        Action<string> SplitAct = pStr =>
            wkArr = pStr.Split(' ').Select(X => int.Parse(X)).ToArray();

        SplitAct(InputList[0]);
        int N = wkArr[0];
        int[] BanArr = new int[N];
        int UB = BanArr.GetUpperBound(0);

        foreach (string EachStr in InputList.Skip(1)) {
            SplitAct(EachStr);

            int FromSumInd = wkArr[0] - 1;
            int ToSumInd = wkArr[1] - 1;
            for (int I = FromSumInd; I <= ToSumInd; I++) {
                BanArr[I] = wkArr[2];
            }
        }
        Array.ForEach(BanArr, X => Console.WriteLine(X));
    }
}


解説

ナイーブに解いてます。