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 解析(思維、二進位運算)的更多相关文章

  1. E. Median String 解析(思維、大數運算)

    Codeforce 1144 E. Median String 解析(思維.大數運算) 今天我們來看看CF1144E 題目連結 題目 給你兩個長度為\(k\)的字串\(s\)和\(t\),求字典序排序 ...

  2. A. Arena of Greed 解析(思維)

    Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...

  3. C. Bank Hacking 解析(思維)

    Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...

  4. D. Rescue Nibel! 解析(思維、組合、離散化、差分)

    Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...

  5. F2. Same Sum Blocks (Hard) 解析(思維、前綴和、貪心)

    Codeforce 1141 F2. Same Sum Blocks (Hard) 解析(思維.前綴和.貪心) 今天我們來看看CF1141F2(Hard) 題目連結 題目 給你一個數列\(a\),要你 ...

  6. B. Game of the Rows 解析(思維)

    Codeforce 839 B. Game of the Rows 解析(思維) 今天我們來看看CF839B 題目連結 題目 有如下圖片所示的飛機座位\(n\)排,和\(k\)隊士兵,每隊數量不一定. ...

  7. E. Almost Regular Bracket Sequence 解析(思維)

    Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...

  8. C2. Power Transmission (Hard Edition) 解析(思維、幾何)

    Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...

  9. F. Moving Points 解析(思維、離散化、BIT、前綴和)

    Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...

随机推荐

  1. svn的使用学习

    一:安装 1.svn安装包,语言包下载 地址:https://pan.baidu.com/s/1PFM7ya_hNJM-v979KgCpgA 提取码:mpxq 2.运行下载的TortoiseSVN程序 ...

  2. [网鼎杯 2018]Comment

    [网鼎杯 2018]Comment 又遇到了一道有意思的题目,还是比较综合的,考的跟之前有一道很相像,用的还是二次注入. 因为找不到登陆点的sql注入,所以扫了一下源码,发现是存在git泄露的. [2 ...

  3. spring注解(Component、依赖注入、生命周期、作用域)

    1.注解 注解就是一个类,使用@加上注解名称,开发中可以使用注解取代配置文件 2.@Component 取代<bean  class="">,@Component 取代 ...

  4. [VBA原创源代码] excelhome 汇总多工作表花名册

    生病了,一点一滴的积累,慢慢康复,今年十月,我就 2 周岁了. 以下代码完成了excelhome中留的作业 http://club.excelhome.net/forum.php?mod=viewth ...

  5. 制作u盘启动盘

    制作u盘启动盘 如果是想要制作 windows 系统启动盘,windows 官网提供途径,这里不在赘述. 以下讨论制作 centos 系统启动盘,需要 centos 系统文件,开源,可从官网下载得到. ...

  6. 【题解】[USACO19DEC]Milk Visits G

    题目戳我 \(\text{Solution:}\) 这题不要把思想局限到线段树上--这题大意就是求路径经过的值中\(x\)的出现性问题. 最开始的想法是值域线段树--看了题解发现直接\(vector\ ...

  7. 【题解】小M的作物

    题目戳我 \(\text{Solution:}\) 这题要求最大收获,可以转化为所有可能的收益减去最小割. 单个点很好连边 \((S\to pos\to T),\) 问题在于如何处理组合的点. 观察到 ...

  8. 谈谈InnoDB中的B+树索引

    索引类似于书的目录,他是帮助我们从大量数据中快速定位某一条或者某个范围数据的一种数据结构.有序数组,搜索树都可以被用作索引.MySQL中有三大索引,分别是B+树索引.Hash索引.全文索引.B+树索引 ...

  9. 实时,异步网页使用jTable, SignalR和ASP。NET MVC

    下载source code - 984.21 KB 图:不同客户端的实时同步表. 点击这里观看现场演示. 文章概述 介绍使用的工具演示实现 模型视图控制器 遗言和感谢参考历史 介绍 HTTP(即web ...

  10. Python中字符串有哪些常用操作?纯干货超详细