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 2018」Minimax (線段樹合並 優化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
2018.10.27 loj#2292. 「THUSC 2016」成績單(區間dp)
傳送門 g [ i ]
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 #2058「TJOI / 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 #2026「JLOI / 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 R1」Plot
好難寫啊! 這題如果保證資料隨機,那麼可以直接跑一個最小圓覆蓋,先二分半徑,再貪心覆蓋。 但是出題人顯然不會這麼善良。 於是就可以倍增,\(1,2,4,8,16...\),這樣嘗試長度,找到最大可行二進位制長度(即最高位)後,再逐位確定。 複雜度\(O(nlog^2(n))\) 但是寫完之後又被卡了精度,改
LOJ #2537. 「PKUWC 2018」Minimax (線段樹合併 優化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) 表示集合裡最早被訪問的