51nod 1390 遊戲得分

2021-07-23 08:38:33 字數 1156 閱讀 6482

原題鏈結

1390 遊戲得分

topcoder

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

a與b兩人玩乙個遊戲,這個遊戲有若干個回合(可能0回合)。遊戲的回合依次標號為1,2,3,4...。你不需要關心遊戲的內容,現在只要知道第i回合勝者會獲得2*i-1分,每回合遊戲不存在平局。現在已知a和b在遊戲結束時各獲得了x分與y分的總分。問a在這個遊戲中至少獲勝了幾盤?如果給出的x與y一定不會出現那麼輸出-1.

input

多組測試資料,第一行乙個整數t,表示測試資料數量,1<=t<=5

每組測試資料有相同的結構構成:

每組資料一行包含兩個整數x,y,表示a與b最後的總得分,其中0<=x,y<=1,000,000,000,000。

output

每組資料一行輸出,即a最少獲勝了幾盤,非法的x與y對輸出-1。
input示例

3

8 17

17 8

0 0

output示例

2

30

假設總共玩了n盤那麼a,b獲得的分數總和為(1+n)*n/2*2-n = n*n;所以首先判斷x+y是否為平方數若不是則輸出-1,在判斷x和y是否為2,是則輸出-1,因為2只能由兩個1表示出,不可能

n = sqrt(x+y) n為a和b總共玩的局數,若x或y等於零,或x <= 2 * d-1直接輸出答案

若x>2*d-1那麼把x -= 2 *d -1, d--, ans++不斷執行這三個操作直到 x <= 2 * d - 1, 若x&1, ans++, 否則 ans += 2

#include #define maxn 5000005

using namespace std;

typedef long long ll;

int main()

if(x == 0)

else if(y == 0)

else

if(x <= 2 * d - 1)

else

else

printf("%d\n", ans+2);

break;}}

} }return 0;

}

51nod 1390 遊戲得分

根據題意,在等差數列 f x 2 x 1 中,選取盡可能少的元素,使得元素總和等於x。若 x y 不是平方數,或 x 2 或 y 2 那麼x y不合法,輸出 1。先在等差數列的後面幾項中,選取 f down f up 使得其和剛好不小於x。若其和剛好等於x,那麼明顯就是這幾項。若大於x,則可以有某個...

51Nod 1390 遊戲得分

1390 遊戲得分 topcoder 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 a與b兩人玩乙個遊戲,這個遊戲有若干個回合 可能0回合 遊戲的回合依次標號為1,2,3,4.你不需要關心遊戲的內容,現在只要知道第i回合勝者會獲得2 i 1分,每回合遊戲不存在平...

51nod 硬幣遊戲

有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...