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

ABC-076-A Rating Goal

■■■問題■■■

高橋君はあるプログラミングコンテストが行われているサイトに参加しています。
ここでは、コンテストに出場した時にこの順位に応じて「パフォーマンス」というものがつき、
それによってレーティング(整数とは限らない)が次のように変化します。

●現在のレーティングをaとする
●次のコンテストで、パフォーマンスbを取ったとする
●そのとき、レーティングはaとbの平均まで変化する

例えば、レーティングが1の人が次のコンテストでパフォーマンス1000を取ったら、
レーティングは1と1000の平均である 500.5 になります。

高橋君は、現在のレーティングがRで、
次のコンテストでレーティングをちょうどGにしたいと思っています。
そのとき、高橋君が取るべきパフォーマンスを求めなさい。 

■■■入力■■■

R
G

●0 <= R,G <= 4500
●入力はすべて整数

■■■出力■■■

高橋君が取るべきパフォーマンスを出力しなさい


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "Input1";

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

        if (InputPattern == "Input1") {
            WillReturn.Add("2002");
            WillReturn.Add("2017");
            //2032
            //高橋君の今のレーティングは2002です。
            //次のコンテストでパフォーマンス2032を取ると、
            //レーティングは2002と2032の平均である2017となり、
            //目標を達成することができます。
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("4500");
            WillReturn.Add("0");
            //-4500
            //現在のレーティングと目標のレーティングは0以上4500以下ですが、
            //0未満のパフォーマンスも取ることができます。
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int R = int.Parse(InputList[0]);
        int G = int.Parse(InputList[1]);

        Console.WriteLine(2 * G - R);
    }
}


解説

取るべきパフォーマンスをXとすると、下記の式が成立するので、
その式を変形してます。

(R+X)/2 = G
R+X = 2*G
X = 2*G - R