LOJ 6274 數字 數字dp

2022-05-20 05:09:34 字數 2338 閱讀 3096

題目描述

nirobc 姐姐腦洞了兩個數字 和 ,它們滿足 ,且 , nirobc 姐姐想知道 有多少種不同的取值,若有多組 的 值相同,則只算一次。

(其中 表示按位取或,c/c++中寫作|pascal中寫作or

(其中 表示按位取與,c/c++中寫作&pascal中寫作and

輸入格式

一行,五個非負整數 。

輸出格式

一行,乙個整數,答案。

樣例樣例輸入

11 3 10 8 13
樣例輸出
7
資料範圍與提示

對於所有資料,\(t,l_x,r_x,l_y,r_y<2^\)

\(t,l_x,r_x,l_y,r_y<2^\)

列舉統計答案即可

namespace pt1

}

\(l_x=l_y=0\)

考慮簡單數字\(dp\)

\(dp[i][lim1][lim2]\)表示\(\text\)到了第\(i\)位,\(lim1,lim2\)表示是否受到仍\(r_x,r_y\)的限制

列舉兩個數這一位分別選擇\(0,1\),是否與\(t\)的這一位相同

但是存在一種會算重複的情況

當兩個數均可以取\(0,1\),且\(t_i=1\)的情況,則存在\((0,1),(1,0)\)兩種方案且他們的與相同

如何處理重複?我們分類討論一下(看不下去可以直接看結論)

1.\(lim1=1,lim2=1\)

這時候,把\(r_x,r_y\)中剩下的位數較大的那乙個選為1,另乙個選為0,這樣選擇一定包含反過來的情況,因為限制減輕了

2.\(lim1=1,lim2=0\)

當然是取(0,1),理由相同

3.\(lim1=0,lim2=1\)

當然是取(1,0),理由相同

4.\(lim1=0,lim2=0\)

那麼可以隨便取其中一者

namespace pt2

ll calc(ll n,ll m)

void solve()

}

\[\

\]\[\

\]設兩個數分別取\(x,y\),且\(x\and y=i\),列舉\(i\),然後再列舉\(x\),就能得到計算得出\(y\),檢查每乙個\(i\)是否存在方案

複雜度為\(o(3^)\)

namespace pt3

if(!j) break;

}ans+=fl;

if(!i) break;

} printf("%d\n",ans);

}}

\[\

\]同\(subtask2\)一樣,都可以通過列舉發現同樣的結論,所以只需要給\(\text\)狀態加上兩維即可ac

(事實是不會證明,但是對拍了20000組隨機資料,跑過了<64的所有資料,應該沒有問題)

namespace pt4

return dp[p][lim1][lim2][lim3][lim4]=res;

} ll calc()

void solve()

}

前面的轉移中總是會出現重複,這裡我們通過改變dp狀態來防止這種重複

每次把可能重複的轉移全部存下來

即如果存在兩個轉移方案\(x \and y\)相同,我們就把轉移他們得到的下一步狀態壓進去,得到乙個新的dp

\(dp[i][s]\)表示可能出現的\((lim1,lim2,lim3,lim4)\)組的集合為\(s\)

每次把相同的\(x\and y\)壓進同乙個狀態裡,就防止了重複

ll t,l1,r1,l2,r2;

ll dp[61][1<<16];

int get(int a,int b,int c,int d) // 為四個lim1的情況編號

int main();

rep(a,0,1) rep(b,0,1) rep(c,0,1) rep(d,0,1) if(s&(1<}

rep(j,0,1) if(g[j]) dp[i][g[j]]+=dp[i+1][s];

} }ll ans=0;

rep(i,0,(1<<16)-1) ans+=dp[0][i];

printf("%lld\n",ans);

}

loj6274 數字 題解

ppt 首先考慮樸素做法。我們列舉 v 檢查是否能存在 x 和 y 滿足 x land y v 設dp狀態 f i,0 1,0 1,0 1,0 1 表示當前考慮了前 i 位,是否存在一組 x 和 y 滿足 x land y v x lor y t lx leq x leq rx ly leq y l...

吉利數字 數字dp

中國人喜歡數字6和8。特別地,一些人喜歡滿足含有特定個數6和8的數。現在請求出,在區間 l,r 之間的第k大的含有x個6和y個8的數。輸入的第一行包括4個數字,l,r,x,y。接下來的一行給出該組資料的詢問數q。接下來q行中,每行有乙個整數k。對於某個詢問,輸出一行,為對應的第k大的數。如果不存在這...

ZJOI模擬 數字 數字dp

題目描述 已知t lx,rx,l y,ry t l x,rx ly,ry 問在滿足lx x r x,ly y r y,xo ry t l x x rx ly y ry xor y t的情況下,w xand y w x andy 有多少種取值。解題思路 數字 dp 會變得比較方便。考慮乙個數 w,我們...