歸納+找規律.
如果終點 $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可以獲取 設定 移除行間...