「6月雅礼集训 2017 Day5」学外语】的更多相关文章

[题目大意] 给出$\{P_i\}$,求经过以下操作后能够得到的不同序列个数: 第一步,选择$i, j$,交换$P_i,P_j$:第二步,把所有$P_x=i$的$P_x$变为$j$,把所有$P_x=j$的$P_x$变为$i$. $n \leq 10^5$ [题解] 显然就是求 给出一个基环内向森林,求交换编号后,不同构的个数. 考虑什么时候会发生同构的情况. 容易发现,每当出现k个子树相同,或k个环套树相同,就有 k! 种同构方案. 那么我们只需要做一遍树哈希.环套树哈希(可以用最小表示法,或者…
[题目大意] 给你$n$个点,被一个半径为$R$的元圆划分成内(包含边界).外两个部分. 要连若干线,每个点只能连一条线,不存在重点和三点共线. 线只能连在内部点和外部点之间,线长度不超过$d$. 如果一个外部点$w$和三个内部点$x,y,z$距离都不超过$d$,且两个内部点$x,z$没有和外部点$w$连线,我们准备从外部点$w$连到内部点$y$.那么如果$x$和$z$的连线有和$w$和$y$的连线相交,那么是不合法的. 求合法情况下,最多连多少线.以及方案. $1 \leq n \leq 10…
[题目大意] 询问[L,R]中选若干个数异或起来得到的答案集合大小.多组数据. 对于50%的数据,$R - L \leq 10^4$ 对于100%的数据,$R - L \leq 10^{18}, T \leq 10^2$ [题解] 考虑50%的数据,暴力线性基即可. 这样的复杂度是$O(T(R-L)logn)$ 观察到数据比较特殊,是连续的一段正整数,我们写完线性基暴力然后打个表观察数在什么时候被插入到线性基里. 我们以[23333, 66666]为例: 首先L=23333,这个数一定被插入到线…
[题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. $1 \leq T \leq 10^5, 1 \leq n \leq 10^7, 1\leq k \leq 10^9$ [题解] 显然引号序列可以看做括号序列,于是我们有了一个$O(n^2)$的dp了. 设$f_{i,j}$表示到第$i$个位置,前面有$j$个左引号没有匹配,的方案数 每次,要么有…
原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 |区间交| 的乘积最大. $1\leq n,L_i,R_i\leq 10^6$ [题解] 把区间去掉包含情况,然后进行排序,变成$l_i$和$r_i$都递增的数列. 然后容易发现取得区间一定是连续的一段. 然后我们推一推决策单调性. 容易得出当$j$优于$k$的情况: $r_i * (r_j - r_…
[题目大意] 有$n$天,每天能吃饭.睡觉.什么事也不干 每天吃饭的愉悦值为$e_i$,睡觉的愉悦值为$s_i$,什么都不干愉悦值为0. 要求每连续$k$天都要有至少$E$天吃饭,$S$天睡觉. 求最大愉悦值. $k \leq n \leq 1000, 0\leq s_i, e_i \leq 10^9, 0 \leq E+S \leq k$ [题解] 首先什么都不干这个是xjb写的肯定没有用.. 然后我们考虑费用流,我钦定n天都睡觉,那么假设有一天吃饭,那么我们换成吃饭的费用就是$e_i-s_i…
[题目大意] 有$n$个位置,每个位置有一个数$x_i$,代表从$i$经过1步可以到达的点在$[\max(1, i-x_i), \min(i+x_i, n)]$中. 定义$(i,j)$的距离表示从$i$到$j$经过多少步,从$j$到$i$经过多少步,这两个取最小值. 求任意两点间最大的距离. $1\leq n \leq 10^5, 1 \leq x_i < n$ [题解] 每个点经过若干次能过到达的,显然是一个区间. 考虑倍增,$[L_{x,i}, R_{x,i}]$表示从$x$开始,经过$2^…
[题目大意] 给出一棵带权树,有两类点,一类黑点,一类白点. 求切断黑点和白点间路径的最小代价. $n \leq 10^5$ [题解] 直接最小割能过..但是树形dp明显更好写 设$f_{x,0/1/2}$表示$x$这个点的子树中,0表示没有带颜色的点连到这个子树的根$x$,1表示黑点连到$x$,2表示白点连到$x$. 直接转移即可.具体看代码,挺好推得.. # include <stdio.h> # include <string.h> # include <iostrea…
[题目大意] 给出一个$n$个数的序列$\{a_n\}$,其中有些地方的数为0,要求你把这个序列填成一个1到$n$的排列,使得: $(a_i, a_j) = 1$,当且仅当$(i, j) = 1$.多组数据. $n \leq 3\times 10^5, T\leq 10$ CodeForces:无多组数据,$n \leq 10^6$ [题解] 这题有点神奇啊.. 首先考虑序列全是0要怎么做. 考虑到如果两个数的位置含有的因数种类完全一样,那么它们是可以互换的.(这个挺显然的) 观察如果两个质数的…
[题目大意] 给出平面上$n$个点,求一条连接$n$个点的不相交的路径,使得转换的方向符合所给长度为$n-2$的字符串. $n \leq 5000$ [题解] 考虑取凸包上一点,然后如果下一个是‘R',也就是向右转,那么就连到最左的点,这样下一次无论连到哪里都是向右:如果是'L',同理. 由于每次都是一个半平面,所以不会相交. # include <stdio.h> # include <string.h> # include <iostream> # include…