小石壩第一次月賽:A
題目描述
girl有一天遇見了boy,於是他們開始玩遊戲。
girl和boy初始各有一個正整數A和B,並且他們共同設定了一個閾值L。
然後遊戲就開始了,對於每一局操作的人,假設他手上拿著的是數字x,對手手上拿著的是數字y
(記這一局開始時y的數值為y0),那麼:
1、如果x>L,那麼他就勝利了,否則進入步驟2
2、他會給對手的數值加上x(即),如果此時對手手上的數值y大於等於2y0,那麼這一輪結束輪到對手操作,否則繼續執行步驟2
由於boy愛慕著girl,所以boy想知道當girl先手或後手時能否勝利。
輸入
一行三個正整數A,B和L,分別表示girl初始的數字,boy初始的數字和閾值。
輸出
一行兩個字串'Yes'或'No',分別表示girl先手以及後手時能否勝利,如果可以則輸出'Yes',否則輸出'No'(不包含單引號)。
樣例輸入
232 42 9483
樣例輸出
No No
----------------------------------------------------------------------------------------------------題目來源:牛客網:Wannafly挑戰賽28 -----------------------
題目分析:
這道題目主要考察思維和邏輯能力.
此題主要應去分析(女孩優先,男孩優先)這兩種情況.
以女孩優先為例:
首先應該判斷女孩手中數字girl_number是否大於公共值L.
- 若girl_number大於公共值L則女孩獲勝.
- ①girl_number不大於公共值L,則進行操作2.為男孩的數字加girl_number直到updata_boy_number大於等於2*boy_number.
此時男孩手中的數字boy_number已經變為更新後的updata_boy_number.
②判斷boy_number是否大於公共值L若大於則男孩獲勝,否則為女孩的數字加boy_number直到updata_girl_number
3.返回步驟1,直到出現獲勝者.
注意事項:
- L的值是一個固定值
- 男孩和女孩手中的數字是一直變化的.
- 注意格式問題,女孩先手結果後面為空格,女孩後手結果後面為換行.
參考程式碼:
#include<stdio.h>
void result(long long girl_number,long long boy_number,long long L,long long const_flag)
//const_flag用於標記女孩是先手還是後手,先手為0,後手為1
{
long long updata_girl_number;
long long updata_boy_number;
long long flag=const_flag; //flag用於判斷該誰進行操作,0為女孩,1為男孩
while(1)
{
if(const_flag==0&&girl_number>L)
{
if(const_flag==1)
printf("Yes\n");
else
printf("Yes ");
break;
}
if(flag==0)
{
//updata_girl_number=girl_number;
updata_boy_number=boy_number;
while(updata_boy_number<2*boy_number)
{
updata_boy_number+=girl_number;
}
flag=1;
boy_number=updata_boy_number;
}
if(boy_number>L)
{
if(const_flag==1)
printf("No\n");
else
printf("No ");
break;
}
if(flag==1)
{
updata_girl_number=girl_number;
while(updata_girl_number<2*girl_number)
{
updata_girl_number+=boy_number;
}
flag=0;
girl_number=updata_girl_number;
}
if(girl_number>L)
{
if(const_flag==1)
printf("Yes\n");
else
printf("Yes ");
break;
}
}
}
int main()
{
long long boy_number;
long long girl_number;
long long L;
scanf("%lld %lld %lld",&girl_number,&boy_number,&L);
result(girl_number,boy_number,L,0);
result(girl_number,boy_number,L,1);
return 0;
}