UOJ#410. 【IOI2018】会议】的更多相关文章

传送门 首先可以设 \(f[l][r]\) 表示 \([l,r]\) 的答案 设 \(x\) 为区间 \([l,r]\) 的最大值的位置,那么 \(f[l][r] = min(f[l][x-1]+h[x]\times (r-x+1),f[x+1][r]+h[x]\times (x-l+1))\) 这样的 \(dp\) 结构形成了笛卡尔树 那么考虑在笛卡尔树上维护 \(dp\) 对于笛卡尔树上的一个点 \(x\) 它有一个区间 \([l,r]\),考虑维护 \(f[l][i]\) 和 \(f[i]…
题目链接: [IOI2018]meetings 题目大意:有$n$座山峰,每座山峰有一个高度,有$q$次询问,每次需要确定一个开会山峰使$[l,r]$所有山峰上的人都前往开会山峰,一个山峰的人去开会的代价为从这个山峰到开会山峰区间内山峰高度的最大值,对于每次询问求最小代价和. 还是按照编号都从$1$开始讲. 可以发现对于一个询问如果确定了开会地址那么答案只和每个点到开会点区间最大值有关. 而题目又没有强制在线,我们可以按区间最大值来分治. 我们设对于区间$[l,r]$的答案是$ans(l,r)$…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ407.html 题解 套路啊. 先按照两个节点顺序各搞一个kruskal重构树,然后问题转化成两棵kruskal重构树,不断询问,每次询问让你判断是否有点同时存在于 第一棵树的一个子树 和 第二棵树的一个子树中. 这个东西就转成dfs序之后主席树搞一搞就好了. 代码 #include <bits/stdc++.h> #include "werewolf.h" #define clr…
原文链接https://www.cnblogs.com/zhouzhendong/p/IOI2018Day1T1.html 题解 首先二分一下,花费2次操作求出第一位的字符. 假设第一个字符是 Y,答案字符串的长度为 i-1 的前缀是 S,我们考虑如何只花费1次询问得到下一个字符. press(SAA,SAB,SAX,SB) - (i-1) 如果是 0 ,那么下一个字符是 X 如果是 1 ,那么下一个字符是 B 如果是 2 ,那么下一个字符是 A 最后一个字符花费 2次操作暴力询问即可. 这样刚…
https://www.luogu.org/problemnew/show/P5044 题解 这种关于最大值或者最小值的问题,可以往笛卡尔树的方面想. 先考虑一个朴素的\(dp\),设\(dp[l][r]\)表示\(l\sim r\)的答案,转移是: \[ dp[l][r]=min(dp[l][p-1]+a[p]*(r-p+1),dp[p+1][r]+a[p]*(p-l+1)) \] \[ p=min(a[l]\sim a[r]) \] 这个东西乍一看好像没什么优化空间,但是由于我们有笛卡尔树,…
洛谷题面传送门 一道笛卡尔树的 hot tea. 首先我们考虑一个非常 naive 的区间 DP:\(dp_{l,r}\) 表示区间 \([l,r]\) 的答案,那么我们考虑求出 \([l,r]\) 中最大值的位置所在的位置 \(p\),那么如果我们选取的 meeting 的位置 \(\le p\),那么显然 \([p+1,r]\) 部分的贡献都是 \(a_p\),\([l,p]\) 部分的总共先最小是 \(dp_{l,p}\),最优代价为 \(dp_{l,p}+a_p·(r-p)\),否则 \…
一位cornell的教授做的计算机类期刊会议依据Microsoft Research引用数的排名 link:http://www.cs.cornell.edu/andru/csconf.html The following are the journals and conferences in computer science that have published at least 100 papers (2003–2013), with at least 5 citations per pa…
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4574 http://uoj.ac/problem/196 考虑数字随机并且值域够大,我们将元素离散化并且不需要去重. 令$g[i]$表示每一个位置的期望大小. 那么${Ans=\sum (g[i]*(\frac{n(n+1))}{2})^{q})}$ 考虑根据这个${(\frac{n(n+1))}{2})^{q}}$转换一下问题,是不是可以变成: -------------------…
[IOI2018]狼人 luogu UOJ 对人形和狼形分别建克鲁斯卡尔重构树 每次询问就是对于两棵树dfs序的一个二维数点,主席树维护 #include<bits/stdc++.h> using namespace std; const int _=4e5+5; int re(){ int x=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} while(ch>='0'…
IOI2018 组合动作 UOJ 首先显然可以两次试出首字母 考虑增量构造 假设首字母为A,且已经试出前i个字母得到的串s 我们考虑press这样一个串s+BB+s+BX+s+BY+s+XA 首先这个串长不超过4N 其次由于首字母不重,返回的ans只会等于i+2,i+1,i三者中的一个 如果是i+2,那么显然可以确定第i+1个字母为B,因为XA一定不会产生2的贡献(A是首字母) 如果是i+1,那么第i+1个字母一定是X 如果是i,那么第i+1个字母一定是Y 剩下首字母为B,X,Y的情况类似构造…