故地重遊 NOIP2019 格雷碼

2022-02-02 16:25:57 字數 1061 閱讀 2898

洛谷5657

去年noip省賽題,當時就學了1個月oi所以第一題就慘遭爆零,如今再回來刷一遍過了……

總體思路就是把格雷碼當成十進位制的數字進行處理,最後再轉化回二進位制。轉化後的樣子如下:

\(0 \ 1\)

\(0 \ 1 \ 3 \ 2\)

\(0 \ 1 \ 3 \ 2 \ 6 \ 7 \ 5 \ 4\)

\(\dots\)

假設最終結果為\(f(n,k)\)。

不難發現如果要求的數在該行的左半邊:

即\(k<2^\)

那麼\(f(n,k)=f(n-1,k)\)

如果要求的數在該行的右半邊:

即\(k>=2^\)

那麼\(f(n,k)=2^+f(n,2^-1-k)\)

這樣的話我們就可以用遞迴來解決,最後的返回條件就是\(n=1\)時若\(k=0\)則返回\(0\),若\(k=1\)則返回\(1\)。

(以下**中\(ll\)代表\(unsigned \ long \ long\))

ll dfs(int num,ll a)
但這時我們注意到乙個問題:\(num=64\)時\(2^\)會炸\(unsigned \ long \ long\)……

那我們特判一下不就行了。

ll dfs(int num,ll a)
最後再把數字轉化為二進位制即可。

#includeusing namespace std;

typedef unsigned long long ll;//記得開unsigned long long

int n;

ll k;

bool ans[70];

ll power(int x)

return ans;

}ll dfs(int num,ll a)

void change(ll x)

}int main(){

cin>>n>>k;

change(dfs(n,k));

for(int i=n-1;i>=0;i--) cout《幸甚至哉,歌以詠志。

NOIP2019提高組模擬 購物(題解)

強烈譴責 這道題不符合生活常識,優惠卷面額的作用竟然不是扣多少錢的而是扣到多少錢,巨坑!關鍵是樣例還能過,mmp 題解 這道題可以採用貪心的思想,把優惠了的和沒優惠的所以合成乙個陣列在一起算,一起sort一下,然後就要堅持乙個商品只能買一次的原則,將每個要選的優惠後的 標記一波,不選它的原來 而且要...

NOIP2019普及組紀念品

不廢話了,傳送門 p5662 難點在於如何處理擁有的紀念品。我們不妨在當天交易之前把持有的紀念品全部賣出,但你發現你不知道這一天的紀念品如何儲存,我們發現在每一天的最後把購置的紀念品全部以第二天的 賣出,就相當於在第二天一開始賣出,那麼為什麼一定在全部交易完後才賣呢?我們完全可以在買的同時用第二天的...

noip2019 動態規劃刷題歷程

加粗的是值得總結的 從洛谷的普及題開始刷題 揹包式dp 有些技巧的 1.p2639 usaco09oct bessie的體重問題 p1049取模意義下01揹包 技巧 重量 價值 2.金明的預算問題 很經典了 技巧 樹形揹包 3.p1131 zjoi2007 時態同步 技巧 單一表示式樹上dp dag...