LuoguP5652 基礎博弈練習題 博弈

2021-10-08 01:38:26 字數 1138 閱讀 2783

歸納+找規律.    

如果終點 $r$ 是奇數,那麼 $r-m-1$ ~ $r-1$ 這段區間都是先手必敗.      

然後我們發現 $r-m-1$ 及之前都是偶數的話還是先手比敗,直到遇到乙個奇數,就又變成了先手必勝.  

那麼,對於乙個奇數字置,其前面第乙個先手必勝位置就是 $r-m-1$ 前第乙個奇數字置.   

對於偶數,我們發現是先手必敗,而其前面第乙個先手必勝點就是其前面第乙個奇數點.    

上述關係構成了乙個樹形結構,即偶數的話讓前面第乙個奇數連它,奇數的話讓 $i-m-1$ 之前第乙個奇數連它.     

如果 $[l,r]$ 滿足先手必勝,則要求 $l$ 在樹上是 $r$ 的祖先,這個用 dfs 序判斷一下就行了.   

code:  

#include #define n 1000009   

#define ll long long

#define setio(s) freopen(s".in","r",stdin)

using namespace std;

int n,m,q,type,deco[5],edges,tim;

int a[n],fa[n],hd[n],to[n],nex[n],st[n],ed[n];

void add(int u,int v)

void dfs(int x)

int ran()

void get(int &x,int &y)

}int main()

}else

}

if(type==1)

for(int i=1;i<=n;++i) add(fa[i],i);

dfs(0);

int x,y,z;

ll ans=0;

ll mod=1ll<<32;

for(int i=1;i<=q;++i)

if(st[y]>=st[x]&&st[y]<=ed[x])

(ans+=(ll)i*i%mod)%=mod;

}

printf("%lld\n",ans);

return 0;

}

洛谷P5652 基礎博弈練習題

cjr orz 設 f i 表示第乙個到 i 的人是否必勝,對於詢問 l,r 可以發現 f r 只與 a r 的奇偶性有關,奇數為1偶數為0 如果 f i 1 那麼 i 向前 m 位都有 f j 0 對於點 i m 1 如果有人到這裡無路可走,他就必須向後走,一定會落到這 m 個位置之一中,即必輸,...

練習題 基礎練習

第一題 需求 1 計算 5 個月的生活大概開銷 spending 比如 rent 房租 800.00 mealcost 吃飯 900.00 clothingcosts 買衣服 300.00 othercosts 其他費用 300.00 public class dome1 第二題 需求 2 計算 1...

前端基礎練習題

1.js裡面操作屬性的方式有哪些?分別有什麼特點?可以操作js中承認的屬性。不能獲取行間的自定義屬性。可以新增屬性,但是行間看不到。可以操作變數。不能獲取行間自定義屬性。可以新增屬性,但是行間看不到。getattrbute setattrbute removeattrbute可以獲取 設定 移除行間...