睪♂手過招
題意描述:給定n個長度為20的,由0和1組成的序列。對於每個序列,都可以進行操作:將任意乙個1移動到其右邊的第乙個0處。
每次可以選擇任意乙個序列中的任意乙個1操作。不能操作者輸。給定初始n個序列,求是否為必勝態。
題解:sg定理:對於任意乙個狀態 $ x $ ,如果其sg函式值 $ sg(x)=0 $ 則 $ x $ 為必敗態,否則為必勝態。
定義其sg函式值 $ sg(x) $ 為不屬於其所有後繼狀態的sg函式值集合的最小非負整數。
即: $ sg(x)=mex(s) $ 其中s是x的 後繼狀態的sg函式值集合。
比如,若x有5個後繼狀態,其sg函式值分別為1,5,2,0,4,則 $ sg(x)=3 $
對於某個遊戲和(如本題中n個序列),其sg函式為其子遊戲(本題中每個序列)的sg函式的nim(異或)和。
比如,若對於某個遊戲和,其子遊戲的sg函式值分別為1,5,2,0,4,則該遊戲和的sg函式值為15204=2。
由於只有20位,採用狀壓的方式儲存、求每個狀態的sg函式。
話說最近沉迷位運算無法自拔......
於是便有:
for(int i(0);i<=20;i++)
//new:x^k^tmp
cnt++;
a[cnt]=sg(x^k^tmp);//記錄所有x子狀態的sg值。
k=lb(t);
}sort(a+1,a+1+cnt);
if(a[1]>0)return sg[x]=0;
for(int i(1);i<=cnt;i++)
return sg[x]=a[cnt]+1;
}
P2575 高手過招
傳送門 直接搞好像搞不了 考慮轉換模型 顯然每一行棋子不會跑到其他行.所以可以把每一行的情況看成乙個子博弈 顯然整個答案就是每一行的sg值的異或和 不懂的回去學sg函式.考慮怎麼分析一行的狀況 可以發現空位的個數是不會變的 如果把每一段連續的棋子看成一塊 整塊的的值為塊中棋子的個數 那麼每次操作會使...
YTU 2575 交通工具資訊
有乙個交通工具類vehicle,將它為 基類派生的有派生小車類car,卡車類truck和輪船類boat,定義這些類,並使其能夠顯示其各類交通工具的詳細資訊。他們包含的資訊,有如下幾種 1.名字 與輸入的名字相符合 2.時速 km h 最高時速 3.耗油量 l 100km 在經濟時速下測得耗油量 小車...
YTU 2575 交通工具資訊
time limit 1 sec memory limit 128 mb submit 750 solved 421 submit status web board 有乙個交通工具類vehicle,將它為 基類派生的有派生小車類car,卡車類truck和輪船類boat,定義這些類,並使其能夠顯示其各...