1. 程式人生 > >LOJ#2494. 「AHOI / HNOI2018」尋寶遊戲

LOJ#2494. 「AHOI / HNOI2018」尋寶遊戲

題目連結

分析

除了第一個數外,以編號最小的為最低位,把每一個數的第i位拿出來組成一個n位二進位制數,設為bi。
對於所填的運算子,設or為0,and為1,拿出來也會組成一個nn位二進位制數,設為x。
神奇的地方來了,該位運算結果為1當且僅當bi>x。
那麼我們就可以把bibi從大到小排序,對於每個詢問,其答案不為0當且僅當不存在某個1在0的後面。否則就找到第一個0,設為第i位,那麼答案就是bi−1−bi。

Code

#include <bits/stdc++.h>

const int N = 1005;
const int M = 5005;
const int
MOD = 1000000007; int n,m,q,bin[N],pos[M]; struct data { int id,s[N],val; }b[M]; char str[M]; bool cmp(data a,data b) { for (int i = n - 1; i >= 0; i--) if (a.s[i] > b.s[i]) return 1; else if (a.s[i] < b.s[i]) return 0; return 0; } int main() { scanf
("%d%d%d",&n,&m,&q); bin[0] = 1; for (int i = 1; i <= n; i++) bin[i] = bin[i - 1] * 2 % MOD; for (int i = 0; i < n; i++) { scanf("%s",str + 1); for (int j = 1; j <= m; j++) b[j].s[i] = str[j] - '0', (b[j].val += b[j].s[i] * bin[i]) %= MOD; } for
(int i = 1; i <= m; i++) b[i].id = i; std::sort(b + 1, b + m + 1, cmp); for (int i = 1; i <= m; i++) pos[b[i].id] = i; b[0].val = bin[n]; while (q--) { scanf("%s",str + 1); int mn = m + 1, mx = 0; for (int i = 1; i <= m; i++) if (str[i] == '0') mn = std::min(mn,pos[i]); else mx = std::max(mx,pos[i]); if (mx > mn) printf("%d\n",0); else printf("%d\n",(b[mx].val + MOD - b[mn].val) % MOD); } }

相關推薦

LOJ#2494. AHOI / HNOI2018遊戲

題目連結 分析 除了第一個數外,以編號最小的為最低位,把每一個數的第i位拿出來組成一個n位二進位制數,設為bi。 對於所填的運算子,設or為0,and為1,拿出來也會組成一個nn位二進位制數

Loj #2494. AHOI / HNOI2018遊戲

很快 一個數 進制數 i++ 其中 大學 play 單獨 要求 Loj #2494. 「AHOI / HNOI2018」尋寶遊戲 題目描述 某大學每年都會有一次 Mystery Hunt 的活動,玩家需要根據設置的線索解謎,找到寶藏的位置,前一年獲勝的隊伍可以獲得這一年出題

LOJ】#2509. AHOI / HNOI2018排列

題解 雖然要求一個dfs序,但是不是從根開始貪心 從最小的點開始貪心,最小的點顯然是父親選了之後馬上就選它 那麼我們每次把最小的點和父親合併,兩個聯通塊之間也是如此 對於兩個聯通塊,他們合併的順序應該是平均值較小的更靠前 因為有兩個聯通塊和為\(S_i\)和\(S_j\),大小為\(B_i\)和\(

LOJ】#2508. AHOI / HNOI2018遊戲

題解 把沒有門的點縮成一個點 如果\(i->i + 1\)的鑰匙大於\(i\),那麼\(i\)不可以到\(i + 1\),連一條\(i\)到\(i + 1\)的邊 如果\(i->i + 1\)的鑰匙小於\(i\),那麼\(i + 1\)不可以到\(i\),連一條\(i + 1\)到\(i\)的

LOJ】#2495. AHOI / HNOI2018轉盤

題面 題解 考慮我肯定是從一個人出發,開始依次標記,而不會跳過某個人,因為如果我跳過了,那麼我之後回來還需要標記它,比不上我等完它再一直走到最後(因為多了走一圈之後走回它的代價) 我們倍長整個序列,我們要求的就是 \(Min_{i = 1}^{n}{Max_{j = i}^{i + n - 1}{T_j

loj#2020. AHOI / HNOI2017禮物

題意:給定xy陣列求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)%n}+c)^2\) 題解:先化簡可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\sum_{i=0}^{n-1}x_i^2+y_i^2-2*\sum_{i=0}x_i*y_{(i+k)%n}\) 主

LOJ #2537. PKUWC 2018Minimax (線段樹合並 優化dp)

get code define main 有一個 update ems minimax 計數 LOJ #2537. 「PKUWC 2018」Minimax (線段樹合並 優化dp) 題意 : 小 \(C\) 有一棵 \(n\) 個結點的有根樹,根是 \(1\) 號結點,

LOJ #2059. TJOI / HEOI2016字符串 二分 SAM

right temp 使用 urn d+ () tps pac 題目 題目鏈接 題意:給定一個字符串\(s\),有\(m\)次詢問,每次指定兩個區間\([a..b]\)和\([c..d]\),求第一個區間的子串和第二個區間的\(lcp\)的最大值。 考慮二分答案\(mid

LOJ#2799. CCC 2016生命之環

題意 給你一個 \(n\) 個 \(\rm 01\) 組成的環,每次操作之後每個位置為1當且僅當他的左右恰好有1個1.輸出進行 \(T\) 次操作之後的環。 \(n\leq 10^5, T\leq 10^{15}\). 分析 通過1~4步之內模擬可以得到結論:一個位置能夠在 \(2^k\) 的操

【BZOJ】5285: [Hnoi2018]遊戲 -找規律/拆位

傳送門:bzoj5285 題解 首先考慮拆出一位來觀察性質: o r  

LOJ #2058TJOI / HEOI2016求和

不錯的推柿子題 LOJ #2058 題意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二類斯特林數 $ Solution:$ 首先考慮第二類斯特林數的意義:將$ n$個有標號元素放入$ m$個無標號集合(無空

LOJ #2026JLOI / SHOI2016成績比較

很好的鍛鍊推柿子能力的題目 LOJ #2026 題意 有$n$個人$ m$門學科,第$ i$門的分數為不大於$U_i$的一個正整數 定義A「打爆」B當且僅當A的每門學科的分數都不低於B的該門學科的分數 已知第一個人第$ i$們學科的排名為$ R_i$, 即這門學科不低於$ n-R_i

#UOJ 384 luoguP4424 HNOI2018 遊戲 思維題

題意 給你nnn個010101串,qqq次詢問,每次詢問一個010101串,問在每個010101串前新增&或|,有多少種方案使得最後的結果為詢問的串,對1e9+71e9 + 71e9+7取模n

bzoj 5285 [HNOI2018] 遊戲

bzoj 5285 [HNOI2018] 尋寶遊戲 Link Solution 這題太可怕了 想不到 按位考慮 對於當某一位,\(\& 1,\| 0\) 這兩種操作對當前數完全沒有影響,我們只要找到倒著第一次的 \(\&0,\| 1\),或者根本就沒有這樣的玩意 我們如果想讓這一

[bzoj5285] [HNOI2018]遊戲

操作 char s n+1 urn 線索 不同 就是 clas scanf Description 某大學每年都會有一次Mystery Hunt的活動,玩家需要根據設置的線索解謎,找到寶藏的位置,前一年獲勝的隊伍可以獲得這一年出題的機會。 作為新生的你,對這個活動非常感興趣

LOJ #2159. POI2011 R1Plot

好難寫啊! 這題如果保證資料隨機,那麼可以直接跑一個最小圓覆蓋,先二分半徑,再貪心覆蓋。 但是出題人顯然不會這麼善良。 於是就可以倍增,\(1,2,4,8,16...\),這樣嘗試長度,找到最大可行二進位制長度(即最高位)後,再逐位確定。 複雜度\(O(nlog^2(n))\) 但是寫完之後又被卡了精度,改

LOJ #2537. PKUWC 2018Minimax (線段樹合併 優化dp)

題意 小 \(C\) 有一棵 \(n\) 個結點的有根樹,根是 \(1\) 號結點,且每個結點最多有兩個子結點。 定義結點 \(x\) 的權值為: 1.若 \(x\) 沒有子結點,那麼它的權值會在輸入裡給出,保證這類點中每個結點的權值互不相同。 2.若 \(x\) 有子結點,那麼它的權值有 \(p_x\) 的

【BZOJ5285】[HNOI2018]遊戲(神仙題)

【BZOJ5285】[HNOI2018]尋寶遊戲(神仙題) 題面 BZOJ 洛谷 題解 既然是二進位制按位的運算,顯然按位考慮。 發現這樣一個關係,如果是\(or\)的話,只要\(or\ 1\),那麼無論前面是啥,操作完之後都是\(1\);同理\(and\ 0\)也是一樣,無論前面是什麼,操作完都是\

[Min-Max 容斥] LOJ#2542. PKUWC 2018隨機遊走

這題我原來使用 O(2nn3)O(2nn3) 暴力過的…跑的還賊快 可以用Min-Max 容斥 設 Max(S)Max(S) 表示集合裡最晚被訪問的節點被訪問的期望步數(也就是訪問所有節點的期望步數)。 設 Min(S)Min(S) 表示集合裡最早被訪問的