D. The Wu 解析(思維、二進位運算)
Codeforce 1017 D. The Wu 解析(思維、二進位運算)
今天我們來看看CF1017D
題目連結
題目
略,請直接看原題
前言
官方解答實在看不懂...之後還記得的話再補那個做法吧

想法
只要注意到\(n\le12\)代表所有可能出現的數字\(\le\sum\limits_{i=0}^{11}2^i=2^{12}-1=4096-1\),那就會注意到這題的\(m,q\le5\cdot10^5\)是假的,因為總共也才\(4096\)種字串,哪來的\(5\cdot10^5\)這麼多數字讓你問?
所以這題只需要把所有的詢問字串都窮舉一遍,並且直接計算「當前詢問字串與\(m\)個\(multiset\)裡的字串計算Wu值,每個值有多少個」儲存起來(只需要儲存Wu值\(\le100\),因為\(k\le100\)),那麼之後每次詢問只需要\(O(100)\)就可以找到答案了(計算前綴和)。
實作細節:首先把\(multiset\)裡的元素都看成數字;\(cnt[i]=multiset\)中\(i\)的個數;\((s,t)\)的Wu值只和\(s,t\)哪些\(bit\)相同有關,\(wu[(s,t)兩個數字bit相同的位置標為1其他為0的數字]=Wu(s,t)\)
而要計算(s,t)兩個數字bit相同的位置標為1其他為0的數字只需要:\((s\widehat{}(\sim t))\&((1<<n)-1)=(s\widehat{}(\sim t))\&\sim-(1<<n)\),其中\((1<<n)-1是用來只保留小於1<<n的bit\),而\((1<<n)-1=\sim-(1<<n)\)是利用\(-k=\sim k+1\)
程式碼:
const int _n=15;
int t,n,m,q,w[_n],k,cnt[4096],ans[4096][110],wu[4096];
char s[_n];
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m>>q;rep(i,1,n+1)cin>>w[i];
rep(i,0,1<<n)rep(j,0,n)wu[i]+=w[n-j]*((i&(1<<j))>0);
rep(i,0,m){
int num=0;cin>>(s+1);
rep(j,0,n)num+=(s[n-j]-'0')*(1<<j);
cnt[num]++;
}rep(qu,0,1<<n)rep(ts,0,1<<n){
ans[qu][wu[(qu^~ts)&~-(1<<n)]>100?101:wu[(qu^~ts)&~-(1<<n)]]+=cnt[ts];
}while(q--){
cin>>(s+1)>>k;
t=0;rep(j,0,n)t+=(s[n-j]-'0')*(1<<j);
int res=0;rep(i,0,k+1)res+=ans[t][i];
cout<<res<<'\n';
}
return 0;
}
標頭、模板請點Submission看
Submission
D. The Wu 解析(思維、二進位運算)的更多相关文章
- E. Median String 解析(思維、大數運算)
Codeforce 1144 E. Median String 解析(思維.大數運算) 今天我們來看看CF1144E 題目連結 題目 給你兩個長度為\(k\)的字串\(s\)和\(t\),求字典序排序 ...
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- D. Rescue Nibel! 解析(思維、組合、離散化、差分)
Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...
- F2. Same Sum Blocks (Hard) 解析(思維、前綴和、貪心)
Codeforce 1141 F2. Same Sum Blocks (Hard) 解析(思維.前綴和.貪心) 今天我們來看看CF1141F2(Hard) 題目連結 題目 給你一個數列\(a\),要你 ...
- B. Game of the Rows 解析(思維)
Codeforce 839 B. Game of the Rows 解析(思維) 今天我們來看看CF839B 題目連結 題目 有如下圖片所示的飛機座位\(n\)排,和\(k\)隊士兵,每隊數量不一定. ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
随机推荐
- 如何自动填充SQL语句中的公共字段
1. 前言 我们在设计数据库的时候一定会带上新增.更新的时间.操作者等审计信息. 之所以带这些信息是因为假如有一天公司的数据库被人为删了,尽管可能有数据库备份可以恢复数据.但是我们仍然需要追踪到这个事 ...
- 【Python】使用Python解释器
使用Python解释器 调用解释器 python -c command [arg] - 其中 command 要换成想执行的指令,就像命令行的 -c 选项. Python 模块也可以作为脚本使用 py ...
- js undefined和null的判断
function isUndef(value ){ return value === undefined || value === null; }
- [论文理解] Good Semi-supervised Learning That Requires a Bad GAN
Good Semi-supervised Learning That Requires a Bad GAN 恢复博客更新,最近没那么忙了,记录一下学习. Intro 本文是一篇稍微偏理论的半监督学习的 ...
- 03 ArcPython实战篇一
1.自增计算 (字段计算器) total = 0 def accumulate(increment): global total if total: ...
- Tomcat 第六篇:类加载机制
1. 引言 Tomcat 在部署 Web 应用的时候,是将应用放在 webapps 文件夹目录下,而 webapps 对应到 Tomcat 中是容器 Host ,里面的文件夹则是对应到 Context ...
- Win10安装MongoDB
1. 下载安装包:mongodb-win32-x86_64-2012plus-4.2.7-signed.msi 2. 安装,注意选择安装目录 3. 新建配置文件mongo.conf: ``` #数据 ...
- 可能是东半球第二好用的软件工具全部在这里(update in 2020.10.09)
1. 产品经理工具种草 浏览器:Google Chrome 网络浏览器 原型绘制软件:墨刀- 在线产品原型设计与协作平台(https://modao.cc/).摹客mockplus - 摹客,让设计和 ...
- 秒懂JVM的垃圾回收机制
前言 阅读过王子之前JVM文章的小伙伴们,应该已经对JVM的内存分布情况有了一个清晰的认识了,今天我们就接着来聊聊JVM的垃圾回收机制,让小伙伴们轻松理解JVM是怎么进行垃圾回收的. 复制算法.Ede ...
- tomcat 验证码显示问题
在Web开发中使用验证码时可能遇到的问题:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsE ...