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. Oracle学习(一)SQL基础

    一.认识SQL SQL是什么? SQL,结构化查询语言,全称是 Structured Query Language. SQL 是一门 ANSI(American National Standards ...

  2. xss的编码原理

    把以前的笔记翻出来整理一下 最前方 xss如何选用编码原理,为什么 找到的挺清楚的文章了:https://www.cnblogs.com/p0laris/p/11898322.html浏览器解析有两种 ...

  3. 俯瞰 Java 服务端开发

    原文首发于 github ,欢迎 star . Java 服务端开发是一个非常宽广的领域,要概括其全貌,即使是几本书也讲不完,该文将会提到许多的技术及工具,但不会深入去讲解,旨在以一个俯瞰的视角去探寻 ...

  4. Java 实现常见内排序

    一.内排序 1.排序基本概念 (1)什么是排序? 排序指将一个数据元素集合或者序列 按照某种规则 重新排列成一个 有序的集合或者序列.分为内排序.外排序.排序算法的好坏直接影响程序的执行速度以及存储空 ...

  5. 朴素贝叶斯分类器Naive Bayes

    优点Naive Bayes classifiers tend to perform especially well in one of the following situations: When t ...

  6. Python练习题 030:Project Euler 002:偶数斐波那契数之和

    本题来自 Project Euler 第2题:https://projecteuler.net/problem=2 # Each new term in the Fibonacci sequence ...

  7. 【题解】CF1426D Non-zero Segments

    题目戳我 \(\text{Solution:}\) 若\([l,r]\)子段和是\(0,\)则\(sum[r]=sum[l-1].\) 于是我们可以考虑维护当前哪一个前缀和出现过.对于区间\([l,r ...

  8. 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)

    前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...

  9. 高性能HTTP加速器Varnish--基础知识

    一.Varnish 概述 Varnish 是一款高性能且开源的反向代理服务器和HTTP加速器,它的开发者 Poul-Henning Kamp 是 FreeBSD 核心的开发人员之一. 与传统的 Squ ...

  10. Cesium资料

    CesiumLab论坛:https://github.com/cesiumlab/cesium-lab-forum/issues简书上的Cesium实验室文集:https://www.jianshu. ...