【BZOJ5285】【HNOI2018】寻宝游戏
生活随笔
收集整理的這篇文章主要介紹了
【BZOJ5285】【HNOI2018】寻宝游戏
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Description
click me
Solution
對(duì)于結(jié)果的每一位ii考慮如果該位在第jj次操作上為11,那么bibi的第jj位為11,否則為00。
對(duì)于一種操作,如果第jj次操作為與操作,那么xx等于11,否則為00。
如果最終結(jié)果的第ii位上是11,那么x<bix<bi,否則x≥bix≥bi。
然后排序后直接處理每個(gè)詢問求出xx<script type="math/tex" id="MathJax-Element-994">x</script>的范圍即可。
Code
/************************************************* Au: Hany01* Date: Apr 20th, 2018* Prob: [BZOJ5285][HNOI2018] 尋寶游戲* Email: hany01@foxmail.com ************************************************/#include<bits/stdc++.h>using namespace std;typedef long long LL; typedef pair<int, int> PII; #define File(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout) #define rep(i, j) for (register int i = 0, i##_end_ = (j); i < i##_end_; ++ i) #define For(i, j, k) for (register int i = (j), i##_end_ = (k); i <= i##_end_; ++ i) #define Fordown(i, j, k) for (register int i = (j), i##_end_ = (k); i >= i##_end_; -- i) #define Set(a, b) memset(a, b, sizeof(a)) #define Cpy(a, b) memcpy(a, b, sizeof(a)) #define x first #define y second #define pb(a) push_back(a) #define mp(a, b) make_pair(a, b) #define ALL(a) (a).begin(), (a).end() #define SZ(a) ((int)(a).size()) #define INF (0x3f3f3f3f) #define INF1 (2139062143) #define Mod (1000000007) #define debug(...) fprintf(stderr, __VA_ARGS__) #define y1 wozenmezhemecaiatemplate <typename T> inline bool chkmax(T &a, T b) { return a < b ? a = b, 1 : 0; } template <typename T> inline bool chkmin(T &a, T b) { return b < a ? a = b, 1 : 0; }inline int read() {register int _, __; register char c_;for (_ = 0, __ = 1, c_ = getchar(); c_ < '0' || c_ > '9'; c_ = getchar()) if (c_ == '-') __ = -1;for ( ; c_ >= '0' && c_ <= '9'; c_ = getchar()) _ = (_ << 1) + (_ << 3) + (c_ ^ 48);return _ * __; }const int maxn = 1005, maxm = 5005;int n, m, q, pos[maxm];//For bitset bitset<maxm> s[maxn], S;bool operator < (bitset<maxn> A, bitset<maxn> B) {For(i, 1, n) if (A[i] ^ B[i])if (A[i]) return 0; else return 1;return 0; }struct BB {bitset<maxn> b;int id, val;inline bool operator < (const BB A) const { return b < A.b; }inline void getval() {val = 0;For(i, 1, n) val = (val * 2 % Mod + b[i]) % Mod;}}b[maxm];inline bool getbit() {register char c;for (c = getchar(); !isdigit(c); c = getchar()) ;return c ^ 48; }bitset<maxm> getbits() {static bitset<maxm> bt;Fordown(i, m, 1) bt[i] = getbit();return bt; } int main() { #ifdef hany01File("bzoj5285"); #endif//InitInputn = read(), m = read(), q = read();For(i, 1, n) s[i] = getbits();Get array b, which stands for if the i_th bit is 0 or 1, the value of x should < or > b[i], and sort them.For(i, 1, m) {For(j, 1, n) b[i].b[n - j + 1] = s[j][i];b[i].id = i, b[i].getval();}sort(b + 1, b + 1 + m);For(i, 1, m) pos[b[i].id] = i;//Answer questionspos[m + 1] = m + 1;For(i, 1, n) b[m + 1].b[i] = 1;b[m + 1].getval(), ++ b[m + 1].val;while (q --){S = getbits();register int Min = m + 1, Max = 0;For(i, 1, m) S[i] ? chkmin(Min, pos[i]) : chkmax(Max, pos[i]);if (Min <= Max) puts("0");else printf("%d\n", (b[Min].val - b[Max].val + Mod) % Mod);}return 0; } //紅顏未老恩先斷,斜倚薰籠坐到明。 // -- 白居易《后宮詞》總結(jié)
以上是生活随笔為你收集整理的【BZOJ5285】【HNOI2018】寻宝游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《美国职业橄榄球大联盟》:NFL·橄榄1
- 下一篇: 手把手教你千万级唯一ID如何生成