5285 Hnoi2018 尋寶遊戲

2022-04-06 12:55:29 字數 1211 閱讀 6779

鏈結分析:

從下面依次確定運算符號,然後在確定的過程中,需要確定的位數會逐漸減少。比如最後有乙個1,如果在從下往上確定了乙個or 1,那麼再往前可以隨便選了。

那麼就是要求從下往上,第乙個出現的or 1要在and 0之前。如果將這一位上的每乙個數字拿出來,從下往上構成乙個二進位制數a,把and看成1,or看成0,也是從下往上構成乙個二進位制數b,那麼就是要求b對於最後是0的同樣是這樣,然後取一下中間可以選的範圍即可。

**:

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#define fi(s) freopen(s,"r",stdin);

#define fo(s) freopen(s,"w",stdout);

using

namespace

std;

typedef

long

long

ll;inline

intread()

const

int n = 5005, mod = 1e9 + 7

;struct node b[n];

intpos[n], n, m;

char

s[n];

bool

cmp(node a,node b)

return0;

}int

main()

for (int j = 1; j <= m; ++j)

sort(b + 1, b + m + 1

, cmp);

for (int i = 1; i <= m; ++i) pos[b[i].id] =i;

b[0].val = 1

;

for (int i = 1; i <= n; ++i) b[0].val = (b[0].val * 2) %mod;

while (q --)

if (l > r) puts("0"

);

else printf("

%d\n

", (b[l].val - b[r].val + mod) %mod);

}return0;

}

bzoj 5285 Hnoi2018 尋寶遊戲

把輸入的 n 個二進位制數看作乙個大小為 n m 的矩陣 把每一列壓成乙個二進位制數,其中最高位是最下面的元素 然後就有了 m 個二進位制數 b i 然後逐位考慮 我們把操作序列也變成乙個二進位制數 x 1 為 0 為 那麼第 i 位最後的結果為 1 當且僅當 x 注意最高位是最下面的元素 然後就是...

心情 HNOI2018遊記

day 0.全機房的人好像都在做題。然而下午是社團節的遊園會,身為社幹的我風風雨雨在外面各種搬凳子搬椅子換場地招待外校同學 就這樣我好像什麼都沒有複習。晚上就一起去酒店了。大概因為是高一的緣故,並沒有非常的緊張。住進了酒店,滿腦子都是和豆豆 ww3113306 如何吃吃吃玩玩玩。非常開心的擺了一晚上...

比賽 HNOI2018 總結

一將功成萬骨枯,我就是給那些隊爺做基數的 看完題,暴力好打,然後就打 覺得第三題模型很好建啊,先看第三題吧 結果第三題是最。的 圖建出來,先看樹的情況,設dp試一下 結果一直只想著一維的dp,沒去想0 1狀態表示是否選取,於是老久都沒想出來 第一題一開始沒看到30分的狀壓,突然看到,然後就趕緊碼一下...