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

ABC-050-B Contest with Drinks Easy

■■■問題■■■

joisinoお姉ちゃんは、あるプログラミングコンテストの決勝を控えています。
このコンテストでは、N問の問題が用意されており、それらには 1〜N の番号がついています。
joisinoお姉ちゃんは、問題 i(1 <= i <= N) を解くのにかかる時間がTi秒であることを知っています。

また、このコンテストでは、M種類のドリンクが提供されており、1〜M の番号がついています。
そして、ドリンクi(1 <= i <= M) を飲むと、脳が刺激され、問題Piを解くのにかかる時間がXi秒になります。
他の問題を解くのにかかる時間に変化はありません。

コンテスタントは、コンテスト開始前にいずれかのドリンクを1本だけ飲むことができます。
joisinoお姉ちゃんは、それぞれのドリンクについて、
それを飲んだ際に、全ての問題を解くのに何秒必要なのかを知りたくなりました。
全ての問題を解くのに必要な時間とは、それぞれの問題を解くのにかかる時間の合計です。

あなたの仕事は、joisinoお姉ちゃんの代わりにこれを求めるプログラムを作成することです。

■■■入力■■■

N
T1 T2 ・・・ TN
M
P1 X1
P2 X2
・
・
・
PM XM

●入力は全て整数である
●1 <=  N <= 100
●1 <= Ti <= 10万
●1 <=  M <= 100
●1 <= Pi <= N
●1 <= Xi <= 10万

■■■出力■■■

それぞれのドリンクについて、
それを飲んだ際に全ての問題を解くのに必要な時間を求め、順番に1行ずつ出力せよ。


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");
            WillReturn.Add("2 1 4");
            WillReturn.Add("2");
            WillReturn.Add("1 1");
            WillReturn.Add("2 3");
            //6
            //9
            //一つ目のドリンクを飲んだ場合、それぞれの問題を解くのに要する時間は、1秒、1秒、4秒になります。
            //なので、それらを合計した 6秒が答えになり、6を出力します。
            //二つ目のドリンクを飲んだ場合、それぞれの問題を解くのに要する時間は、2秒、3秒、4秒になります。
            //なので、それらを合計した 9秒が答えになり、9を出力します。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("5");
            WillReturn.Add("7 2 3 8 5");
            WillReturn.Add("3");
            WillReturn.Add("4 2");
            WillReturn.Add("1 7");
            WillReturn.Add("4 13");
            //19
            //25
            //30
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    struct PXDef
    {
        internal int P;
        internal int X;
    }

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

        int[] TArr = InputList[1].Split(' ').Select(X => int.Parse(X)).ToArray();
        var PXList = new List<PXDef>();

        for (int I = 3; I <= InputList.Count - 1; I++) {
            int[] wkArr = { };
            Action<string> SplitAct = pStr =>
                wkArr = pStr.Split(' ').Select(X => int.Parse(X)).ToArray();

            SplitAct(InputList[I]);
            PXList.Add(new PXDef { P = wkArr[0], X = wkArr[1] });
        }

        int SumVal = TArr.Sum();
        foreach (PXDef EachPX in PXList) {
            int wkSum = SumVal;
            wkSum -= TArr[EachPX.P - 1];
            wkSum += EachPX.X;
            Console.WriteLine(wkSum);
        }
    }
}


解説

ドリンクごとに総和との差分を求めてます。