2019牛客暑期多校訓練營(第七場)H Pair

2022-05-21 05:38:59 字數 1243 閱讀 9013

數字dp。

這次是針對&和^的,所以數字變成了二進位制位數。針對二進位制從高到低位進行搜尋即可。

#include#include#include#include#include#include#include#include#include#include#include//#include#include#define up(i,a,b)  for(int i=a;ib;i--)

#define upd(i,a,b) for(int i=a;i<=b;i++)

#define dwd(i,a,b) for(int i=a;i>=b;i--)

//#define local

typedef long long ll;

const double esp = 1e-6;

const double pi = acos(-1.0);

const int inf = 0x3f3f3f3f;

const int inf = 1e9;

using namespace std;

int read()

while (ch >= '0' && ch <= '9')

return x * f;

}typedef pairpir;

ll dp[40][3][3][2][2][2][2];

int cnta[40], cntb[40], cntc[40];

int a, b, c, t;

/*za,zb是針對數字0000這樣的數字,題目要求大於等1,所以要去除零的影響

ad是and,xr是xor,limit表示是否達到上限*/

ll dfs(int len, int ad, int xr, int limita, int limitb, int za, int zb)

ll &ans = dp[len][ad + 1][xr + 1][limita][limitb][za][zb];//記憶化

if (ans != -1)return ans;

int a = limita ? cnta[len] : 1;//上限

int b = limitb ? cntb[len] : 1;

ll res = 0;

upd(i, 0, a)

}ans = res;

return res;

}int main()

cout << dfs(31, 0, 0, 1, 1,0,0)<}

}

2019牛客暑期多校訓練營(第七場)

b題 示例1輸入22 1 2 1 21 0 1 輸出no yes就差一點點就打出來了嚶嚶嚶 include include include include include define ll long long using namespace std intmain else if n 1 else...

2020牛客暑期多校訓練營 第七場

可以看成把乙個m n m nm n的長方形劃成若干個寬為1 11的矩形,使得存在兩種分割方法能恰好填滿長和寬。然後只要不斷在矩形裡劃分正方形就行了。include using namespace std typedef long long ll intmain for int i 1 i n i a...

2020牛客暑期多校訓練營(第七場)

b題 傳送門 link 題意 有n m個口罩,需要要把它們裝到一些箱子裡面,要使箱子數盡可能少,並且滿足兩個條件,這些箱子可以分成m組,每組n個口罩,或者分成n組,每組m個口罩。思路 分配方案其實就是乙個迭代的過程。為了使得箱子數最少,每個箱子就應該盡可能的多裝。每次優先裝min n,m 個箱子,每...