WC2021 表示式求值

2022-05-20 04:48:11 字數 926 閱讀 1214

直接列舉每一位求值顯然至少是\(o(n|s|)\)的,為了減少計算次數,考慮對於\(n\)個不同陣列的情況歸納出一些通用情況

對於乙個陣列,考慮計算答案\(\ge a_i\)的方案數,那麼有一部分數\(\ge a_i\)

直接狀壓\(\ge a_i\)的數的集合,對於的數不同二進位制表示就可以得到\(2^m\)種不同的狀態

在計算時,只需要考慮是否\(\ge a_i\),分為兩種值,\(o(1)\)合併即可

預處理出每個二進位制對應的值,然後對於每個\(a_i\)計算答案即可

複雜度為\(o(|s|2^m+nm\log m)\)

#includeusing namespace std;

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

char io;

int rd()

const int n=5e4+10,p=1e9+7;

int n,m;

int a[n][10];

char s[n];

struct node

node(int x)

node operator < (const node x) const

node operator > (const node x) const

node operator + (const node x) const

} x[n];

int i[10],y[n],t,val[n];

void work(int s)

} val[s]=x[1].a[1];

}int main());

int s=0;

for(int j=m-1;~j;--j)

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

}

WC2021 表示式求值

題目鏈結 題解 首先讓我們解決乙個簡單的問題 注意到 k 很小 那麼不妨維護 f 表示 i 號生物的每個位置是否都比 s 中每個元素的值大。用 bitset 維護 f 查詢時 從大到小列舉值即可。時間複雜度 o frac 解決這個問題的關鍵是 每個位置的值都是由 k 個初始陣列中的元素得到的 而 k...

遊記 WC2021遊記

在學校的時候教練讓大家報名,本著不會也要當炮灰的原則填了報名表 放了寒假,給班主任請了假開始自己在家突擊一些完全沒有考到的新知識點,看了點歷年題覺得十分不可做,於是每天就頹頹頹 早上的開幕式很水,說好的8 00 8 30結果講了幾分鐘就沒了 截了一張 dzd 講話的圖作紀念 上來就是隨機化演算法什麼...

WC2021前日常胡話

不知不覺離noip的恐怖回憶已經過去乙個半月了,但我似乎還在whk與oi間徘徊,以至於兩邊都沒搞好,自己心態還受了影響。難得清閒,寫點心裡話出來,就沒有那麼難受了吧。初中我就一直不太很重視whk的學習,上課有的時候不是很認真,然後不太願意寫的作業就應付應付或者抄一抄就過去了。但是因為初中知識太簡單,...