2017多校Round3(hdu6056~hdu6066)
补题进度:7/11
1001
待填坑
1002
待填坑
1003(set)
题意:
给定长度为n(n<=5e5)的数组(是n的一个排列)和一个整数k(k<=80),f[l,r]定义为区间[l,r]内的第k大的数,求所有区间的f值的和
分析:
倒过来考虑,考虑每个数a[i]对答案有多少贡献
将n个数字从大到小依次插入对应位置,已经插入的当作障碍点(可以用set来维护)
那么对于一个i,可以枚举其左边有x个右边有k-x个去统计答案,因为k<=80,所以是OK的
注意边界情况
时间复杂度O(n(k+logn))
1004(01Trie树)
题意:
给一个长度为n(n<=5e5)的数组,问有多少个三元组满足
分析:
异或统计问题肯定想到01Trie树
最简单的想法就是我去枚举j,左右两边分别弄一个01Trie树,但仔细一想发现这样无法统计答案
我们发现一个规律,如果A[i]和A[k]的某一位不同(从高到低),那么A[j]这一位的值是固定的,一定和A[i]相同,和A[k]相反
实际上我们只需要将所有数从后往前加,即枚举i,去统计答案
对于一个确定的A[i],在Trie树上面爬,枚举A[i]和A[k]第一个不同位
——对于当前位A[k]与A[i]相同,继续向下走
——对于当前位A[k]与A[i]不同,那么就统计答案,这里我们可以确定该位A[j]的值为x,那么我们应该怎样求这样的A[j]的个数呢?
这里我们可以预处理,sum[i][j][0/1]表示前i个数中,第j位是0/1的数字有多少个
s[u]表示以节点u下面的所有单词节点作为A[k],前面一共有多少个j满足A[k]的这一位不同,这里可以通过倒着枚举i将A[i]插入的过程中,借助sum来完成
但是注意sum表示的前缀和,对于一个给定的i,我们Trie树节点的s[u]存的是前面所有的j的个数,那么j<i的是要删除的,所以统计答案的时候要减去当前这个子树底下k的个数*i前面的那些满足条件的j的个数
void insert(int p,int x)
{
int u=root;
for(int i=maxw;i>=;--i)
{
int d=((bit[i]&x)>);
if(!ch[u][d]) ch[u][d]=++len;
u=ch[u][d];
++num[u];
s[u]+=sum[p-][i][d^];
}
} ans=;
for(int i=n;i>=;--i)
{
int u=root;
for(int h=maxw;h>=;--h)
{
int d=((bit[h]&a[i])>);
if(ch[u][d^])
ans+=s[ch[u][d^]]-1LL*sum[i][h][d]*num[ch[u][d^]];
if(!ch[u][d]) break;
u=ch[u][d];
}
insert(i,a[i]);
}
1005(贪心)
题意:
给出一个n(n<=1000000)个的点的树,需要你将2~n分成k组
每一组的价值是{1}∪{这个组里所有点}这个集合里所有点组成的最小斯坦纳树的边权和
现在要让所有组的价值和最大
分析:
数据范围相当于提示你要用O(n)的方法
我们给2~n做编号1~k,编号相同的点分到一组
假设分块已经固定了,我们来思考如何统计答案
我们来考察每条边(u,fa[u])对答案的贡献
这个贡献一定是以u为根的子树中不同编号的种数
既然要让最后的总结果最大,我们肯定希望每条边(u,fa[u])对答案的贡献越大越好
即以u为根的子树中不同编号的点的个数越多越好
如果size[u]<=k,那就让它们编号互异,贡献个数是size[u]个
如果size[u]>k,那就让它们k个编号互异,然后剩下的构造相同的,贡献个数是k个
这只是我们的理论答案上界,不过手画画几组样例发现确实可以构造出这样的解,所以理论答案上界就是最后的答案
1006(NTT)
题意:
化简一个式子
分析:
无脑化简,到最后发现就是一个卷积
直接NTT
此处的卷积不再是i+j=k,而是i-j=k,将减法看成加一个负下标,错位处理一下就可以了,仍旧是基础的卷积
1007
待填坑
1008(找规律)
题意:

分析:
比赛时候找规律,发现最后结果就是n^k,快速幂一搞就行了
说一下为啥是n^k
一个整数x一定可以写成a*b^2 其中a是无平方因子数,即|μ(a)|=1
那么题目中这个式子相当于在枚举a,然后计算有多少个b
由于任意一个整数都可以写成这种式子,所以这种计算方式包含了1~n^k内所有的整数
所以答案就是n^k
1009
待填坑
1010(决策单调性优化DP)
题意:
给出n个点的树(n<=3e5)以及n的一个排列,现在你要将这个长度为n的排列分成k组(k<=3e5,n*k<=3e5),让所有组的价值和最小
一组的价值和是这组中所有点在树上的lca的深度
分析:
很典型的一个分段dp
可以很简单写出O(n^2k)的dp
计算价值可以通过O(1)来计算,因为a1,a2,...,am的lca不需要每次算出前缀的lca和后面一位做lca,这m个数的lca一定是lca(a1,a2) lca(a2,a3) ... lca(am-1,am)中深度最小的,于是就可以提前搞一个rmq
然后显然这种问题满足决策单调性,所以时间复杂度O(nklogn),这就能过了
还有一种更优秀的dp方法
我们把所有相邻位置的lca全部写出来,其实就是让我们挑选k个位置作为“关键位置”,这k个位置对结果贡献,其它位置对结果不贡献
dp[i][j]仍旧表示前i个数中挑出j个数作为“关键位置”的最小代价
①当前位置不作为“关键位置” dp[i][j]=dp[i-1][j]
②当前位置作为一个新的“关键位置" dp[i][j]=dp[i-2][j-1]+lca(a[i-1],a[i])
还要注意一点,就是可能某个位置单独作为一块
③dp[i][j]=dp[i-1][j-1]+a[i]
所有的取min就行了
时间复杂度O(nk)
1011(模拟)
略
2017多校Round3(hdu6056~hdu6066)的更多相关文章
- 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 ...
- hdu6134[莫比乌斯反演] 2017多校8
/*hdu6134[莫比乌斯反演] 2017多校8*/ #include <bits/stdc++.h> using namespace std; typedef long long LL ...
随机推荐
- Selenium私房菜系列2 -- XPath的使用【ZZ】
在编写Selenium案例时,少不免是要用到XPath的,现在外面关于XPath使用的参考资料很多,下面我直接转一篇关于XPath使用的文档.如果对XPath不熟悉请参考下文,你不需要去百度/Goog ...
- 错误消息 This computer doesn't have VT-X/AMD-v enabled
在VirtualBox的Ubuntu虚拟机里试图本地安装Kyma(一个基于Kubernetes的开源框架)时,遇到下面的错误信息: E0827 11:19:38.972489 3093 start.g ...
- 【OpenCV】motion blur 的简单实现
先推荐界面比较丑,但是还不错的在线图片处理网站: http://www168.lunapic.com/editor/ 由于最近在做毕设了,结合前面关于图像处理和机器学习的操作,想做一些好玩的东西,其中 ...
- C# 递归读取XML菜单数据
在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...
- python调用aapt工具直接获取包名和tagertSdkversion
背景: 每次海外游戏上架都需要符合google的上架规则,其中适配方面tagetSdkversion有硬性要求,比如需要适配安卓q就需要tagetSdkversion达到28,水平太渣的我每次调用aa ...
- github 新建一个仓库后
每次都记不住命令,记一下,防止找不到 echo "# learn18" >> README.md git init git add README.md git comm ...
- 微信小程序之裁剪图片成圆形
前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在github上看了一些例子,一般剪裁图片用的都是方形,所以自己打算写一个小组件,可以把图片剪裁成圆形,主 ...
- Python_编程题集_003_递归算法解析
3.递归算法: 3)传入一个Json串,返回一个字典,字典只取出Json最底层的数据, 中间如果有字符串也要进行处理,请以下面的数据为例,请用递归方法实现 Json:{"a":&q ...
- C语言学习12
希尔排序 //希尔排序 #include <stdio.h> void main() { ], i; int shell(int a[], int n); printf("请输入 ...
- 【HIHOCODER 1043】题目1 : 完全背包
描述 且说之前的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时刻了! 等等,这段故事为何似曾相识?这就要从平行宇宙理论说起了---总而言之,在另一个宇宙中,小 ...