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的題目更容易 ...
随机推荐
- subDomainsBrute安装(windows系统)
step1: 安装python2.7(省略) step2: 下载subDomainsBrute 地址: https://github.com/lijiejie/subDomainsBrute 下载 ...
- 基于Java反射的定时任务设计
一.使用场景 1.不需要立即执行.立即得到结果返回. 2.如果执行失败.需要有失败补偿机制. 3.和业务代码解耦,适用于不同的务场景. 4.调用接口的入参.出参 统计,方便查询. 二.执行顺序 1.业 ...
- SQLSERVER如何在子查询中使用ORDER BY
今天在使用公司的一个pager接口的时候,需要传递一个查询的SQL语句,因为我希望他能够在pager对他查询出来的结果排序之前自己先进行排序, 于是在这个SQL中添加了ORDER BY,但是得到的结果 ...
- VS 高级版本新建的项目如何降级使低版本 VS 可以打开
转载:https://blog.csdn.net/u012814856/article/details/70325267 一.引言 这里因为工作的原因,公司项目使用的是 VS2015 的编译环境,但是 ...
- Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)
代码前需要了解的关于Calendar类的内容: 1.在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象.Calendar 的 ...
- 2-Java面试-面向对象
Java面试问题-面向对象 Q1.什么是多态? 多态被简要描述为"一个接口,许多实现".多态性是能够在不同上下文中为某事物赋予不同含义或用法的一种特征-具体来说,就是允许诸如变量, ...
- SHOI 2014 【概率充电器】
加油,两道了,也就还剩那么二十来道吧,慢慢做...... 题目大意: 给你一颗树,树上的每一个节点都有一定的概率p[i]能冲上电,有电的点,可以通过树上的边,一定概率地将电传递到与它相邻的点,同时对于 ...
- K8S基础
四组基本概念 Pod/Pod控制器 Name/Namespace Label/Label选择器 Service/Ingress Pod Pod是k8s里能够被运行的最小的逻辑单元(原子单元) 1个Po ...
- S3C6410 LCD驱动分析(转)
一. 理论分析1. 几个概念:FIMC : Fully Interactive Mobile Camera (完全交互式移动摄像机)FIMD: Fully Interactive Mob ...
- 多测师讲解内置函数 _format_高级讲师肖sir
#python中的格式化输出:format()# 和%号格式化输出一样,是%号的另外一种格式#1.不设置指定位置,按默认顺序 a ='{}'.format('hello','nihao','dajia ...