トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
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));
}
}
解説
ナイーブに解いてます。