2017多校Round5(hdu6085~hdu6095)
补题进度:7/11
1001(模意义下的卷积)
题意:
给出长度<=50000的两个数组A[] B[],保证数组中的值<=50000且A[]中数字两两不同,B[]中数字两两不同
有50000个询问,对于每个询问k,你需要回答有多少对(i,j)满足A[i]%B[j]==k,你只需要回答答案的奇偶性就行了
分析:
我们容易想到询问k要全部预处理出来
$$ans[k]=\sum_{i mod j=k} {A[i]*B[j]}$$
这实际上是个模意义下的卷积,套路是枚举余数和倍数
我们可以枚举B的下标i,然后枚举一个倍数j,那么等价于每次将$A[j*i...(j+1)*i-1]$加到$ans[0..i-1]$上
因为是在模2意义下的加法,所以就是异或
想到用一个bitset维护A和ans,那么复杂度就从$O(n ^ {2})$降到了$O(\frac {n^{2}} {64})$
但是STL里的bitset不支持取区间的操作,所以只能自己手写bitset压位,然后手动取区间
1002(AC自动机+DP)
题意:
给出不超过6个01字符串,每个长度不超过20,现在你要构造长度为2L的特殊字符串,即前L个位置与后L个位置的对称位置字符一定要不同
问一共有多少种长度为2L的特殊字符串可以包含所有输入的01字符串
分析:
如果仅仅是问有多少个长度为L的字符串可以包含所有输入字符串,那么就是个经典的AC自动机+DP
&dp[i][j][s]&表示我走了i步,当前在自动机的j节点,已经走出的字符串集合为s的方案数
对于此问题,我们只需要走出长度L就行了,另一半的L对应就出来了
我们可以把给定的字符串插入自动机,然后把字符串的逆序插入自动机
但是还要考虑跨中间的情况
所以我们可以对于每个字符串,去枚举中间点,它会对应出一个左边字符串,我们把这个也加入自动机
但是注意“跨中间字符串”只能在最后一个位置匹配,不能在前面位置匹配,所以我们对“跨中间字符串”与普通字符串要在自动机上分开标记
1003
待填坑
1004(莫比乌斯反演+FFT)
题意:
A和B进行n次石头剪刀布,获胜、失败、平局的概率都是$\frac {1} {3}$
如果A赢了a局,B赢了b局,平了n-a-b局,那么这比赛的价值就是$gcd(a,b)$
输出比赛价值期望,以$ans*3^{2n}$输出
分析:
首先容易分析出结果式子
$$ans=3^{n} * \sum_{i=0}^{n}\sum _{j=0}^{n-i}\binom{n}{i}\binom{n-i}{j}*gcd(i,j)$$
然后看见这种求和式里有gcd,就容易想到枚举因子把它反演掉
$$ans=3^{n} * \sum_{d=1}^{n} \phi (d)\sum_{i=0}^{\frac{n}{d}}\sum _{j=0}^{\frac{n}{d}-i}\binom{n}{id}\binom{n-id}{jd}$$
第一个$\sum$可以直接枚举d,然后后面长得很像卷积,感觉可以FFT优化,我们分析一下后面的式子
我们把阶乘式子拆出来,然后化简
$$f(i)=\frac{1}{(id)!}$$
$$g(i+j)=\frac{1}{(n-(i+j)d)!}$$
$$ans[j]=\sum f(i)*g(i+j)$$
每次后面的是个$\frac{n}{d}$级别的FFT,所以总的时间复杂度是$O(nlog^{2}n)$的
1005
待填坑
1006(贪心)
贪心构一个菊花图,分情况列下式子即可
1007
待填坑
1008(dp)
一个数字的个数由两部分组成,一种是由前面数字组合而成,另一种是本身存在于集合里,所以只需要把之前的数字进行背包,得出组成该数字的方案x,将b[num]-x,得到的就是本身存在于集合里的num个数
1009(康托展开)
题意:
一个数称为好数当且仅当存在某一个d,将这个数转成d进制,恰好有d位,且系数是0~d-1的排列,当然首位不能为0
询问一个区间[l,r]内好数的个数,$r\leqslant 10^{5000}$
分析:
肯定是枚举进制d,去看看[1..x]内有多少个好数
一定是前面一些d都在x之内,容易发现这样对于每个d,方案数就是$d!-(d-1)!$
然后我们会找到一个d,这个d能产生的所有好数中部分比x大,部分比x小
我们可以将该数字转成d进制(不断高精度除),然后用类似康托展开的方法求方案数
这里值得一提就是找d的过程,我们可以根据$n^n$来估计一个进制最大的位数,然后去很方便地判断d进制是否是当前数字的临界进制
注意细节就是数字比较小的时候我们可以枚举前面的一些小进制使得不遗漏,并且找到d之后,我们再去算算d-1,d+1
时间复杂度$O(len^2)$
1010
待填坑
1011(贪心)
略
2017多校Round5(hdu6085~hdu6095)的更多相关文章
- hdu6085[压位+暴力] 2017多校5
/*hdu6085[压位+暴力] 2017多校5*/ /*强行优化..*/ #include <bits/stdc++.h> using namespace std; struct bit ...
- 2017 多校5 hdu 6093 Rikka with Number
2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...
- 2017 多校5 Rikka with String
2017 多校5 Rikka with String(ac自动机+dp) 题意: Yuta has \(n\) \(01\) strings \(s_i\), and he wants to know ...
- 2017 多校4 Wavel Sequence
2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- 2017 多校3 hdu 6061 RXD and functions
2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
- 2017 多校1 I Curse Myself
2017 多校2 I Curse Myself(第k小生成树) 题目: 给一张带权无向连通图,该图的任意一条边最多只会经过一个简单环,定义\(V(k)为第k小生成树的权值和\),求出\(\sum_{k ...
- hdu6136[模拟+优先队列] 2017多校8
有点麻烦.. /*hdu6136[模拟+优先队列] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long ...
随机推荐
- centos启用socks5服务
直接在终端用 root 安装 *** 官方客户端 apt-get install python-pip -ypip install shadowsocks 然后编辑 /etc/shadowsocks. ...
- 开启apahce的mod_speling.so模块,让使用apahce http服务器不再有大小写烦恼
今天把服务器重新安装系统,做apache调优前,优化下apache对网络地址大小写不区分的支持.记录如下: 编译mod_speling.so模块去除Apache-url大小写字母敏感的配置 1. 进入 ...
- 在DLL中创建窗口时一个值得注意的地方 — UnregisterClass
背景描述: 今天要测试一份注入代码,拿以前写的创建窗口的DLL来做测试. 第一次注入时一切正常,窗口被成功创建并显示,但在第二次加载时窗口没有显示出来. 经过研究发现在第二次加载DLL时Registe ...
- 【OpenCV】motion blur 的简单实现
先推荐界面比较丑,但是还不错的在线图片处理网站: http://www168.lunapic.com/editor/ 由于最近在做毕设了,结合前面关于图像处理和机器学习的操作,想做一些好玩的东西,其中 ...
- css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style
css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style .con1{ width: 100p ...
- Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序
三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...
- Shell获取多行输入并输出每行的第3个字符
#!/bin/bash echo "$(cut -c3 /dev/stdin)" 标准输入的文件名是/dev/stdin,如果在cut后面输入了这个参数,那么shell会提示你输入 ...
- Openjudge-4110-圣诞老人的礼物
这一题是一道贪心的题目,但是它比较特殊的地方在于糖果可以分开拿,我们不必整箱拿,所以我们可以直接就把糖果按照价值比从大到小排序,然后整箱装不下的时候,剩余重量乘以它的价值比,这样就算出来了. 对于结构 ...
- mysql5.7配置
my3306.cnf [client] port = 3306 #端口socket = /data/mysql3306/mysql3306.sock #mysql以socket方式运行的soc ...
- 自制操作系统小样例——参考部分linux0.11内核源码
详细代码戳这里. 一.启动引导 采用软件grub2进行引导,基于规范multiboot2进行启动引导加载.multiboot2的文档资料戳这里. 二.具体内容 开发环境 系统环境:Ubuntu 14. ...