題目給定乙個 n∗m
n*mn∗
m 大小的網格圖,每個格仔有乙個非負整數。
每個人從乙個非零格仔作為矩形的左上角,將該格仔的數減去乙個非零值,其餘矩形內的格仔的數值任意變化(可不變),兩人輪流操作,問先手後手贏?
當且僅當所有左斜對角線的異或值為 0
00 時,後手勝,否則先手贏。
簡單證明:當局面存在若干個左斜對角線的異或值不為0,則先手選擇其中最左上方的對角線,上的不為 0
00 的乙個格仔(要能減去乙個數使得該對角線異或值為 0
00)作為矩形左上角。
然後再選右下角 an,
ma_
an,m
,此時把所有異或值不為 0
00 的對角線都包含進來了,任意改變網格的格仔值至所有左斜對角線異或值為 0
00 即可。
無論後手做什麼操作,先手都可以重複該操作直到全部網格為 0
00。(選擇矩形左上角可以視作,左斜對角線上的 nim
mnimm
nimm
博弈)
#include
#define endl '\n'
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using
namespace std;
typedef
long
long ll;
const ll maxn =
1e2+5;
// √n
int ans[maxn <<1]
;int
main()
bool flag =
false
;for
(int i =
2; i <= n + m; i++)}
cout <<
(flag ?
"ashish"
:"jeel"
)<< endl;
}}
codeforces 1194F 組合數學
傳送門 你有n個事件,你需要按照1 n的順序完成這些事件,每個事件需要 t i 的時間完成,你現在一共有t的時間去做這些事情,每做一件事情的時候,你有0.5的概率花費 t i 的時間完成他,也有0.5的概率花費 t i 1 的時間去完成他,如果在做這個事件的時候時間花完了,你就相當於沒有做成這個事件...
codeforces 1114F 線段樹練習
這是一道用線段樹維區間值的一道題,題意很簡單,就是對於給定的乙個序列,初始時每個數的值不大於300,然後有兩中操作,乙個是對區間 l,r 的每個數乘上以個數x,乙個是詢問區間的乘積的尤拉函式值,首先對於第乙個操作顯然可以用線段樹的延遲更新來完成,對於第二個操作,我最先沒考慮資料,就想著直接維護區間的...
Codeforces 985F 字串雜湊
題目鏈結 題意簡述 給定乙個長度為n n 2e5 的字串s 僅含有小寫字母 有m m 2e5 次查詢。每次查詢給三個數,x,y,len,求在s x s x len 1 和s y s y len 1 是否存在相應位置唯一對應關係。例如aba和brb,aaa和kkk,abs和ert是唯一對應。aab和a...