time limit: 1 second
memory limit: 128 mb
nic和susan在玩乙個有趣的遊戲:在遊戲開始前,他們先約定乙個正整數n,同時令m=1。遊戲過程中,每個人都可以將m的值擴大2到9中的
任意倍數。第乙個使得m≥n的人就是最後的贏家。
假設nic和susan都十分聰明,並且遊戲過程中都使用最佳的策略,問誰會是最後的贏家(nic總是第乙個先玩)。
乙個正整數n(1≤n≤2^32-1)。
在使用最佳的策略的情況下,如果nic必勝,則輸出「nic」。如果susan必勝,則輸出「susan」。否則輸出「god」。
9
nic【題解】
等價題意如下
給定n,nic和susan輪流將n整除2~9,第1個使n<=1的人贏。
nic先手,問對於給定的n誰必勝。誰必勝
設f[n]表示n為n時是先手贏還是先手輸。
轉移假設x ∈;
如果n/x為整數。則m=n/x否則m= (n / x)+1 這裡的除法是整除運算。直接去尾。
然後f[n] = f[n] || !f[m];
我們這裡的講解圍繞那個等價題意展開。
f[1..9]都為true表示nic只要除一下就能<=1了。所以是先手贏。
然後我們對f[t]考慮。
如果f[t/x](這裡的x∈上面那個區間)是先手輸。也就是說先手從t/x開始會輸。
那麼我們只要讓t/x變成t就好了,然後就變成先手贏了。
因為你是t。然後除乙個x就變成t/x了。然後先手就不是nic了。而是susan.而f[t/x]==true表示在t/x時先手(這下變成susan)一定會輸。那不就等價為f[t]是先手(nic)贏了嗎?
根據這樣的規律我們可以寫出以下程式
(注意:下面這個程式不足以過所有的資料);
memset(bo, false, sizeof(bo));
for (int i = 1; i <= 9; i++)
for (int i = 10; i <= 21999999; i++)
for (int j = 2; j <= 9; j++)
然後我們用這個程式求出bo[1..2000]的值。進而可以發現規律
—n =[1, 9],先手必勝
—n =[10, 18],先手必敗即後手必勝
—n =[19, 162],先手必勝
—n =[163, 324],先手必敗即後手必勝
也就是先手勝i = 9 if (n<=9) 先手
後手勝i=i*2 if (n <=i) 後手
先手勝i=i*9 if (n <=i) 先手
後手勝i=i*2 if (n <= i)後手
i會很大 ,要用long long
。。。【**】
/*
等價題意如下
給定n,nic和susan輪流將n整除2~9,第1個使n<=1的人贏。
nic先手,問對於給定的n誰必勝。
*/#include long long n;
int main()
if (b == 1) //如果現在是先手勝的區間那麼就直接*2
i = i * 2;
else //否則乘9;
i = i * 9;
b = 1 - b;
} return 0;
}
2023年美國網頁流量最大贏家和輸家
誰是2014年美國網頁流量的最大贏家和輸家?我們在simi程式設計客棧larweb上仔細分析了我們蒐集到的網頁流量資料,找到了答案。我們對比了美國前100家最流行 在2013年10月至2014年10月期間的排名,發現了如下結果 2014年美國網頁流量最大贏家和輸家 最大的輸家有 1 目前日本電子產品...
3G上網絡卡招標,華為成最大贏家
3g上網絡卡招標,華為成最大贏家 前些日子,人民郵電報 有訊息稱,中國電信3g上網絡卡集團採購結束,華為憑藉多款效能優異的3g上網絡卡,贏得了超過50 的份額。不僅如此,最近幾天又有訊息說,在另外兩家移動公司 中國移動和中國聯通的採購中,華為也坐到了頭把交椅。而華為公布的2008年的年度財報顯示 華...
全球晶元缺貨,可能三星才是最大贏家
全球晶元缺貨越演越烈,導致各方均要求兩大晶元代工廠三星和台積電增加產能,進而引發各種晶元漲價。這次缺貨問題,誰又將成為最大受益者呢?柏銘科技認為可能是三星。可能大家對三星的認識還是因為它是全球最大的手機企業和電視企業,然而三星還擁有龐大的晶元產業,它在晶元設計 晶元製造方面均居於全球領先地位。三星介...