居然有兩次都把 把long long寫成%d的 scanf和printf交上去了。。。。。wa了兩次。。。
A.B題以後不能再這麼2了。
--------------------------(我是可愛的分界線)我的目標是:誰都看得懂-------------------------
C.崔逗逗的難題
題意:給正方形邊長求深紫面積,淺紫面積,粉紅色。
解法:1.面積小學生都會求,關鍵是精度。
2.使用long double類型的變量,輸出的時候用%Lf。
3.如果把表達式直接放到printf中,也可以水過去,這就要看人品了,反正我是沒水過去,唉。
D.崔逗逗給你信心
題意:給n,求0<=x<=n的範圍內,有多少個數滿足(x)^(2x)^(3x)==0 。結果對1000000009取餘。
輸入樣例
1
2
輸出樣例
2
解法:
首先,要知道什麼叫異或。就是把a和b轉換成二進制,a異或b(即a^b)就是把二進制列出來,不同就是1,同樣就是0。比如11^23。11就是1101,23就是10111。兩者異或就是01010。
其次,要知道什麼情況下異或爲0,那肯定是兩個數完全一樣,異或才能一個1都不出現。只有000000000.
所以,x^2x^3x==0等價於x^2x==3x.
再來看看異或和加法的區別。a,b當前位置一個爲0,一個爲1,那麼異或爲1,加法也是1,a,b當前位置爲兩個0,異或爲0,加法也爲0.。。。。。。只有a.b當前位置兩個都是1,異或才和加法不同。顯然X+2X=3X,所以現在我們的目標是,找出異或和加法完全一樣的數字。
2x相當於x的二進制左移一位。比如3,二進制爲11,它的兩倍6,二進制爲110.也就是說把某個數字,二進制左移一位,它和左移之前的相異或,不出現兩個都爲1,這樣的數字在0到n有幾個?也就是1不能和1相鄰。
開一個數組f,存進去二進制只有一位時有幾種可能,二進制有兩位時有幾種可能,很容易發現這是一個斐波那契數列,也就是f(n)=f(n-1)+f(n-2)的數列。
現在給出一個n,比如它的二進制爲10100,那就令第一位爲0,剩下四位隨便,也就是res=res+f(4),再接着找下一個1,下一個1在第三個,那就是res=res+f(2),加入最後只剩最後一位。res=res+1;
實現有點麻煩,要用遞歸。
E. 焦級長搭積木
題意:積木數N,層數H,最底層M個。除最底層,每一層的積木數是它下一層積木數+1或-1且每層積木不超過10個。輸出方案數,給出K,要求給出順序排列的第K種方案(最小的排列爲第一種)。
輸入樣例
13 6 2
1
3
-1
輸出樣例
3
2 1 2 3 2 3
2 3 2 3 2 1
解法:
1.開一個三維數組dp[n][h][m]表示n個積木有h層最底層爲m個的情況。
2.把h=1而且n=m的情況初始化爲1,其餘初始化爲0.......dp[n][h][m]=dp[n-m][h-1][m+1]+dp[n-m][h-1][m-1];相當於抽掉最底層後剩下的狀態轉移方程。
3.給你一個k。你把[n-m][h-1][m-1]擁有的積木數x和[n-m][h-1][m+1]擁有的積木數比較,如果k比前者小,那就把前者作爲下一個狀態,如果k比後者大,那就把後者變爲下一個狀態此時的k變爲k-x,一直轉移下去直到最頂層。
4.這題的代碼還沒交。。。。明天提交試試。。。。。
完整地寫完了。我覺得自己真是太棒了哈哈哈。