// yukicodr // No.126 //二次元可変配列 //vector > mass; //vector > memo; //vector memo; //#include "stdafx.h" #include #include #include //list #include //queue #include //連想コンテナ(要素が自動でソートされる)、要素1つ(Key)、keyの重複ない、O(logN) #include //連想コンテナ(要素が自動でソートされる)、要素2つ(Key,data)、keyの重複ない、dataは重複あり、O(logN) #include //hash、O(1) #include //hash、O(1) #include #include #include #include #include //#include using namespace std; #define FOR(x,to) for(x=0;x(b)?(a):(b)) #define FMIN(a,b) ((a)<(b)?(a):(b)) #define FCEIL(a,b) ((a)+(b)-1)/(b) typedef unsigned long long ULL; typedef signed long long SLL; queue _queue; int A, B, S; int main() { cin >> A; cin >> B; cin >> S; int a_only = abs(S - A) + S; //1階でボタンを押したらAだけで移動 if (S == 1) { cout << a_only; return 0; } //Sとの距離がAが近い or 同じならAだけで移動 if (abs(S - A) <= abs(S - B)) { cout << a_only; } else { //Sとの距離がBが近い場合はBを使うことになる int d = 0; //まずBはSのところまで絶対動く d = abs(B - S); //Aはどのみち1階まではいく必要があるのでS地点からのBの移動量がポイントになる //BはAのところまでいくか、それとも1階までいくか、どちらか近いほうに行く if (abs(A - S) > S-1) { //cout << "down to 1th." << endl; d += S-1; //1階へ } else { //cout << "move to A." << endl; d += abs(A - S);//Aのところへ、ただし1階まで } d += A; //もしAが地下にいる場合はAは上がって下がる if (A == 0) d += 2; cout << d; } return 0; }