先記錄下心情,其實在看大佬題解前,自己已經基本yy出來了,但有一兩個點沒處理好,就只能放棄,亟待加油啊~
本題思路:
特判bi為1或者為2時的情況,
①當bi = 1 && ai == 1時,此時這堆石子會被看作普通堆,因為兩個人的合法操作是一樣的;
②當除第一種情況之外的bi == 1 || bi == 2的堆數大於1堆時,bob必勝,因為此時alice的操作是受一堆以上的堆約束的,當bob後手對剩餘的一堆進行操作(bi == 1時,將ai置為偶數,bi == 1時,將ai置為奇數),bob將可以控制該堆的操作。
③當只有乙個bi = 1 && ai > 1 時,alice為了防止bob控制操作,當ai為奇數時會取完該堆,ai為偶數時取至剩餘1個石子,因為剩餘1個時,alice也可以進行和bob一樣的合法操作。此時交換先後手,對當前堆剩下的1與剩下的普通堆進行nim和求解即可。
④當只有乙個bi = 2時,如果ai為偶數,則alice會為了防止被控制將ai取光。此時交換先後手,對剩下的普通堆進行nim和求解即可。當ai為奇數,alice不管怎麼取都會剩下1個石子,那麼這顆石子會被bob用來控制操作,所以此時bob必勝。
⑤任意bi都為0,則就是普通nim了。
#include #include #include #include using namespace std;
const int maxn = 1e5+5;
int jk[maxn], hk[maxn];
int main()
if(hk[i] == 2)
if(hk[i] == 0) ans ^= jk[i];
} if(ck >= 2)
if(ck == 1)
if(!ans) printf("bob\n");
else printf("alice\n");
} return 0;
}
繼續加油~
按順序輸出ZOJ
description 讀入乙個字串,字串中包含zoj三個字元,個數不一定相等,按zoj的順序輸出,當某個字元用完時,剩下的仍然按照zoj的順序輸出。input 題目包含多組用例,每組用例佔一行,包含zoj三個字元,當輸入 e 時表示輸入結束。1 length 100。output 對於每組輸入,請...
很有趣的ZOJ
是不是zoj不能新增注釋的啊?很奇怪。這是1057的ac include stdio.h include math.h int main else printf a has d points.b has d points.n aa,bb return 0 新增一行注釋之後 include stdio...
zoj 2325 線段相交
本題可以直接排序再算可以看到全部的那段線段長度,也可以用相似三角形來做,我選擇後者 具體方法 先把障礙物按x從小到大排序,然後就遍歷,令top l.x1,記得要先連線a i x1與hou.x2,再用相似三角形求出要求區域的右端點,在類似的求出區域的左端點,要注意不能超過l.x2,因為最後還要l.x2...