「2017 山东三轮集训 Day7」Easy】的更多相关文章

题目描述 给你一棵 $n$ 个点的树,边有边权.$m$ 次询问,每次给出 $l$ .$r$ .$x$ ,求 $\text{Min}_{i=l}^r\text{dis}(i,x)$ . $n,m\le 10^5$ . 题解 动态点分治+线段树 分块做法太傻逼了我们把它丢到垃圾桶里.树上距离考虑动态点分治. 求出这棵树的点分树,对每一棵点分树子树开一棵动态开点编号线段树,维护编号在某区间内的点到当前点距离的最大值. 对于一次查询,我们在点分树从 $x$ 到根的路径上所有点对应的线段树上查询 $[l,…
一棵带边权的树,多次询问 $x$ 到编号为 $[l,r]$ 的点最短距离是多少 $n \leq 100000$ sol: 动态点分治,每层重心维护到所有点的距离 查询的时候在管辖这个点的 log 层线段树里查就可以了 因为这样每一层的答案只会漏而不会错,所以正确性有保障 不会写点分治了...orz #include <bits/stdc++.h> #define LL long long #define rep(i, s, t) for (register int i = (s), i##en…
\(\color{#0066ff}{题目描述}\) JOHNKRAM 最近在参加 C_SUNSHINE 举办的聚会. C 国一共有 n 座城市,这些城市由 n−1 条无向道路连接.任意两座城市之间有且仅有一条路径.C_SUNSHINE 会在编号在 [1,n] 内的城市举办聚会. 为了整整 JOHNKRAM,C_SUNSHINE 把他丢在了城市 x,让他自己走到一座城市去参加聚会.JOHNKRAM 希望你能帮他计算,他最少要走多长的路才能到达一座正在聚会的城市? 当然,C_SUNSHINE 一共举…
这个就比较简单了~ Code: #include <cstdio> #include <algorithm> #define N 100004 #define inf 1000000000 #define setIO(s) freopen(s".in","r",stdin) // , freopen(s".out","w",stdout) using namespace std; int n,edges…
「2017 山东三轮集训 Day7」Easy 练习一下动态点分 每个点开一个线段树维护子树到它的距离 然后随便查询一下就可以了 注意线段树开大点... Code: #include <cstdio> #include <cctype> #include <algorithm> using std::min; template <class T> void read(T &x) { x=0;char c=getchar(); while(!isdigi…
模拟赛的题 好神仙啊 题面在这里 之前的Solution很蠢 现在已经update.... 题意 有$ n$个商品价格均为$ 1$,您有$ m$种面值的货币,面值为$ C_1..C_m$ 每种物品你有$ P$的概率选取,然后你需要选出若干货币购买这些物品 购买商品不存在找零,求浪费在找零上的钱的期望对$ 1e9+7$取模 $ n \leq 10^9 \ m \leq 10^2 \ C_iC_j \leq 10^4$ $Solution $ 垃圾模数毁我青春 首先考虑$ m=1$怎么做 枚举购买的…
题解: 当奇数 发现答案就是C(n,1)^2+C(n,3)^2+...C(n,n)^2 倒序相加,发现就是C(2n,n) 所以答案就是C(2n,n)/2 当偶数 好像并不会证 打表出来可以得到 2.当n为偶数且为4的倍数时,答案为C(2n,n)+C(n,n/2)/2 3.当n为偶数且不为4的倍数时,答案为C(2n,n)-C(n,n/2)/2 另外Claris告诉我在p较小时可以数位dp来求 先用lucas定理 C(n,m)=C(n%p,m%p)*C(n/p,m/p) 然后我们就可以把n表示成p进…
题目: 题解: 暴力一波 \(SG\) 函数可以发现这么一个规律: \(p\) 为奇数的时候 : \(SG(n) = n \% 2\) \(p\) 为偶数的时候 : \(SG(n) = n \% (p+1) == p ? 2 : n \% (p+1) \% 2\) 对于奇数的情况我们就可以直接用一棵支持区间取反和区间查询 \(1\) 的个数的线段树搞定. 那么难点在于偶数的情况. 我们可以采用分块算法. 每个块分别中保存 \(\bmod (p+1)\) 为奇数的数和为偶数的数. 然后每次查询的时…
题目: 题解: 我们可以发现所有的交换器都是一个位置连接着下一层左侧的排序网络,另一个位置连着另一侧的排序网络. 而下一层是由两个更低阶的排序网络构成的. 两个网络互不干扰.所以我们可以通过第一行和最后一行列出多个2-SAT的约束限制. 所以我们可以在每一次都跑一边2-SAT来决策出最外层的交换器是否开启. 然后我们就可以发现每次2-SAT都一定有解,也就是说不可能出现无解的情况. 用2-SAT保证字典序最小即可. #include <cstdio> #include <cstring&…
link: https://loj.ac/problem/6142 推完一波式子之后发现求的是:ΣC(N,i)^2, 其中i是偶数. 然后就可以卢卡斯乱搞了,分奇偶和之前的答案合并就好了233. #include<bits/stdc++.h> #define ll long long #define maxn 1000010 #define ha 1000003 using namespace std; ll n; int num[10],len; int f[2],pre[2],inv[ma…
loj description 一棵树,每次给出\(l,r,x\),求从点\(x\)出发到达\([l,r]\)中任意一点的最短距离. sol 动态点分治. 建出点分树后,在每个节点上用以点编号为下标的线段树维护出子树中所有点到他的距离. 对于一组询问只要暴跳父亲然后查询就可以了. 一般而言写动态点分治的时候要维护两个东西,一个是当前节点子树的信息,另一个是当前子树给上一级重心(也就是点分树上的父亲的所有贡献)方便在计算时减去.但是在这里,因为题目中要求的是\(min\),而重复计算不会影响结果的…
[LOJ6077]「2017 山东一轮集训 Day7」逆序对 题目描述 给定 n,k ,请求出长度为 n的逆序对数恰好为 k 的排列的个数.答案对 109+7 取模. 对于一个长度为 n 的排列 p ,其逆序对数即满足 i<j 且 pi>pj 的二元组 (i,j)的数量. 输入格式 一行两个整数 n,k. 输出格式 一行,表示答案. 样例输入 7 12 样例输出 531 数据范围与提示 对于 20% 的数据,n,k≤20:对于 40% 的数据,n,k≤100:对于 60% 的数据,n,k≤50…
#6077. 「2017 山东一轮集训 Day7」逆序对   题目描述 给定 n,k n, kn,k,请求出长度为 n nn 的逆序对数恰好为 k kk 的排列的个数.答案对 109+7 10 ^ 9 + 710​9​​+7 取模. 对于一个长度为 n nn 的排列 p pp,其逆序对数即满足 i<j i < ji<j 且 pi>pj p_i > p_jp​i​​>p​j​​ 的二元组 (i,j) (i, j)(i,j) 的数量. 输入格式 一行两个整数 n,k n,…
Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都有高度,对于编号为 $ i $ 座塔,其高度为 $ i $.对于一座塔,需要满足它与前面以及后面的塔的距离大于等于自身高度(不存在则没有限制).问有多少建造方案.答案对 $ m $ 取模. 塔不要求按编号为顺序建造. 输入格式 一行三个整数 $ n, l, m $. 输出格式 输出一个整数,代表答案…
Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\),设$ path(u,v) \(表示\) u$ 到 $v \(的路径,\)dist(u,v) \(表示\) u$ 到\(v\) 的距离,希望你求出 Input 第一行一个整数 \(type =0/1\)表示这个测试点的数据类型. 第二行两个整数 \(n,q\). 接下来$ n−1$ 行,每行三个整数…
Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, v) $ 能互相攻击当前仅当满足以下两个条件: $ x = u $ 或 $ y = v $ 对于 $ (x, y) $ 与 $ (u, v) $ 之间的所有位置,均不是障碍. 现在有 $ q $ 个询问,每个询问给定 $ k_i $,要求从棋盘中选出 $ k_i $ 个空位置来放棋子,问最少互相能攻…
「2017 山东一轮集训 Day5」苹果树 \(n\leq 40\) 折半搜索+矩阵树定理. 没有想到折半搜索. 首先我们先枚举\(k\)个好点,我们让它们一定没有用的.要满足这个条件就要使它只能和坏点相连.其他的点没有要求.这样算出来了至少\(k\)个点没有用的生成树个数,我们要得到恰好\(k\)个点的生成树个数就简单容斥一下就好了. 然后我们要得到有\(k\)个点没有用的情况下的点集的方案数.看到\(40\)这个范围我们容易想到折半搜索. 然后就没了. 但是我没写容斥,写的枚举集合划分(被吊…
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么二分一个答案\(d\),把所有点挂到\(d+1\)次祖先上去,那么\(d+1\)次祖先的哈希值就是它原本的括号序列挖去了若干段,直接暴力哈希拼接起来就好了. #include<iostream> #include<cstdio> #include<cstdlib> #inc…
loj6068. 「2017 山东一轮集训 Day4」棋盘 链接 https://loj.ac/problem/6068 思路 上来没头绪,后来套算法,套了个网络流 经典二分图 左边横,右边列 先重新算一下行和列,就是他们x相通的的算一个 然后就去掉了障碍的作用 然后每一行贡献是递增的(0,1,2,3,4---) 直接暴力连上每条可能有的流量为1的边就行了 下面的图可能没啥用就是个普通二分图 错误 有的数组开小了 有的memset(1e6) T成40 代码 #include <bits/stdc…
#6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j.于是有转移方程: $$ f_{i,j}= \begin{cases} f_{i-1,j}&,j\neq S_i\\ \sum_{k=1}^{m+1}f_{i-1,k}&,j=S_i \end{cases} $$ 表示如果当前j不是s[i]的话,最靠后的结尾的j还是那个位置,从i-1转移即可,否…
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我们分两部分贪心:(注意 $ tot $ 表示左右元素的异或和) 首先我们要让总和最大的话,我们只需要讨论 $ tot $ 的某一位为0的情况(如果为1,那么不管怎么分配两边的数都只能并且一定有一个数,使它这一位上含有1).对于 $ tot $ 的某一位为0的情况,我们肯定贪心的让两边都在这一位上含有…
Description 在某个神奇的大陆上,有一个国家,这片大陆的所有城市间的道路网可以看做是一棵树,每个城市要么是工业城市,要么是农业城市,这个国家的人认为一条路径是 exciting 的,当且仅当这条路径上的工业城市和农业城市数目相等.现在国王想把城市分给他的两个儿子,大儿子想知道,他选择一段标号连续的城市作为自己的领地,并把剩下的给弟弟,能够满足两端都是自己城市的 exciting 路径比两端都是弟弟的城市的 exciting 路径数目多的方案数. Solution 我们分析一下: 要求的…
题解: 满满的套路题.. 首先显然从大到小枚举 然后每次生成的逆序对是1----(i-1)的 这样做dp是nk的 复杂度太高了 那我们转化一下问题 变成sigma(ai   (ai<i)  )=k的方案数 据说是个经典问题..感觉非常奇妙 先容斥一下,也就是说 总的-至少1个条件不满足+至少2个条件不满足 那考虑一下如何算有x个条件不满足 不满足这个条件就可以等价成ai>=i 那么可以先将ai-i 那么就变成所有数的定义域都变成了自然数 那么方案数就是组合数了 显然我们可以把x个条件-i的和相…
题目描述 在某个神奇的大陆上,有一个国家,这片大陆的所有城市间的道路网可以看做是一棵树,每个城市要么是工业城市,要么是农业城市,这个国家的人认为一条路径是 exciting 的,当且仅当这条路径上的工业城市和农业城市数目相等.现在国王想把城市分给他的两个儿子,大儿子想知道,他选择一段标号连续的城市作为自己的领地,并把剩下的给弟弟,能够满足两端都是自己城市的 exciting 路径比两端都是弟弟的城市的 exciting 路径数目多的方案数. 输入格式 第一行一个正整数 n n n.第二行 n n…
首先假设全睡觉,然后用费用流考虑平衡要求建立网络流 把1~n的点看作是i-k+1~k这一段的和,连接(i,i+k,1,e[i]-s[i]),表示把i改成吃饭,能对i~i+k-1这一段的点产生影响:然后连接(i,i+1,k-ms-me,0),这是除了限额外可以随便选的(i+k,i+1>n就连到t) 然后建立ss,向1~k点连(ss,i,inf,0),再连(s,ss,k-ms,0)限流 然后跑最大费用最大流即可 #include<iostream> #include<cstdio>…
养ImmortalCO k可重区间问题 的增强版:有上下界! 直接都选择s[i],然后再把一些调整到e[i] 考虑通过最大流的“最大”,使得至少每k个有me个e, 通过最大流的“上界”,限制每k个最多有k-ms个e 麻烦的是第一个要求. 建图方式: 开始ans+=∑s[i] 1.每个点i到i+k,(1,e[i]-s[i]) 2.每个点i到i+1,(k-ms-me,0) 3.建立新点lp,lp到1~k每个点(inf,0) 4.s到lp,(k-ms,0) 最大费用最大流 第4和第1,可以保证任意k个…
题目传送门 Description 给定 $ n, k $,请求出长度为 $ n $ 的逆序对数恰好为 $ k $ 的排列的个数.答案对 $ 10 ^ 9 + 7 $ 取模. 对于一个长度为 $ n $ 的排列 $ p $,其逆序对数即满足 $ i < j $ 且 $ p_i > p_j $ 的二元组 $ (i, j) $ 的数量. 一行两个整数 $ n, k $. 一行,表示答案. 对于 $ 20% $ 的数据,$ n, k \leq 20 $: 对于 $ 40% $ 的数据,$ n, k…
题目描述: loj 题解: 容斥+生成函数. 考虑加入的第$i$个元素对结果的贡献是$[0,i-1]$,我们可以列出生成函数. 长这样:$(1)*(1+x)*(1+x+x^2)*--*(1+x+x^2+--+x^{n-1})=\frac{\prod_{i=1}^{n}1-x^i}{(1-x)^n}$ 把分母提出来:$\frac{1}{(1-x)^n} = (1+x+x^2+--)^n = \sum_{i=0}^{k} C_{i+n-1}^{n-1}$,日常小球放盒. 现在还剩$\prod_{i=…
题面 给定 n , k n,k n,k ,求长度为 n n n 逆序对个数为 k k k 的排列个数,对 1 e 9 + 7 \rm1e9+7 1e9+7 取模. 1 ≤ n , k ≤ 100   000 1\leq n,k\leq 100\,000 1≤n,k≤100000 . 题解 首先,不要看到逆序对就手忙脚乱,它其实是可控的. 令 d i d_i di​ 为第 i i i 个数前面比它大的数的个数,满足条件 d i ∈ [ 0 , i ) d_i\in[0,i) di​∈[0,i) .…
有趣的思博套路题,想到了基本上加上个对线性基的理解就可以过了 首先考虑到这个把数分成两半的分别异或的过程不会改变某一位上\(1\)的总个数 因此我们求出所有数的\(\operatorname{xor}\),然后从高到低枚举每一位的值,分情况讨论: 如果这一位是\(1\),那么显然分配完后必然使得\(x_1,x_2\)中一个是\(0\),一个是\(1\) 如果这一位是\(0\),如果不是全\(0\),那么必然可以构造方案让\(x_1,x_2\)两数都是\(1\) 比较一下我们优先使\(x_1+x_…