TJOI2015题解】的更多相关文章

(转载前请标明出处,谢谢) 打算来做一波TJOI2015,来写题解啦! Day1: T1:[bzoj3996] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3996 首先我们对题目中的式子化简一下,得到 : 于是这就成了一个最小割模型: S和(i,j)连边,权值为b[i,j] (i,j)和i,j分别连边,权值为inf i和T连边,权值为c[i] 于是跑一下最小割就可以了: (然而不知道发生了什么...最小割跑不过去...似乎bzoj把…
TJOI2015 弦论 字符串 \(s\) 和 \(t\) 和 \(k\).如果 \(t=0\),不同位置的相同子串算 \(1\) 个:如果 \(t=1\),不同位置的相同子串算多个.求 \(k\) 小子串,如果不存在输出 \(-1\). 数据范围:\(1\le n\le 5\cdot 10^5\),\(t\in\{0,1\}\),\(1\le k\le 10^9\). 这题还是很经典的,对理解后缀自动机 \(\tt SAM\) 很有帮助.以前我做过这题(并写了题解),现在复习后缀自动机的时候又…
后缀自动机入门. 题目描述 为了提高智商,ZJY 开始学习弦论. 这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为 \(n\) 的字符串,求出它的第 \(k\) 小子串是什么.你能帮帮她吗? 输入输出格式 输入格式: 第一行是一个仅由小写英文字母构成的字符串 \(s\). 第二行为两个整数 \(t\) 和 \(k\),\(t\) 为 \(0\) 则表示不同位置的相同子串算作一个.\(t\) 为 \(1\) 则表示不同位置的相同子串算作多个.\(k\) 的意义…
https://www.lydsy.com/JudgeOnline/problem.php?id=3998 https://www.luogu.org/problemnew/show/P3975 对于一个给定长度为N的字符串,求它的第K小子串是什么. 后缀自动机,对l排序然后从后往前推size和sum数组(貌似也可以叫拓扑?). size:当前状态的字符串个数(贡献). sum:以当前状态为起点之后的满足要求的字符串个数. #include<cstdio> #include<iostre…
这道题...好像是第一道我自己切出来的黑题... 先说一句,牛顿二项式蒟蒻并不会,可以说是直接套结论. 求诸位老爷轻喷. 这道题用卡特兰数搞. 卡特兰数这玩意从普及组初赛一路考到省选,十分有用. 如果不清楚这个概念的话可以看一下这里. 卡特兰数是有两种计算方法: 1) 用递推算. 2) 用排列组合. 用它解题的流程一般是先说明所求的问题可以归到第一类中,然后再用第二类来计算具体的值. 像这道题就可以用卡特兰数水过. 我们假设\(f_i\)表示节点数为i的二叉树有多少种. 那么可以发现存在这样的关…
网络流/最小割/最大权闭合图 2333好开心,除了一开始把$500^2$算成25000……导致数组没开够RE了一发,可以算是一次AC~ 咳咳还是回归正题来说题解吧: 一拿到这道题,我就想:这是什么鬼玩意……矩阵乘法早忘了……画了半天也想不起来到底是谁乘谁,只记得有个式子:$c[i][j]=\sum a[i][k]*b[k][j]$ 好吧没关系,既然画图不行了,我们就先拿这个东西,纯代数来搞! D的表达式,里面那层我们可以写成:$\sum a[i][k]*b[k][j] - c[i][j]$ 然而…
TJOI2015终于写完啦~~~ T1:[TJOI2015]旅游 描述:(BZ没题面只能口述了..)一个人在一棵树上走,每次从a->b会进行一次贸易(也就是在这条路径上买入物品然后在后面卖出)然后每次经过一个点该点的物品价格会上涨v,求每次贸易的最大获利 很裸的一道树链剖分,就是题目描述太不明白了..这样就是在某条路径上找到某个点减去后面路径的最小点的值的最大值.可以用线段树的区间合并解决.就是在求答案时的合并答案上方向搞反了查了很久...以前也犯过着种错误,以后不能再犯了.. CODE: #i…
4001: [TJOI2015]概率论 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 262  Solved: 108[Submit][Status][Discuss] Description   Input 输入一个正整数N,代表有根树的结点数   Output 输出这棵树期望的叶子节点数.要求误差小于1e-9   Sample Input 1 Sample Output 1.000000000 HINT 1<=N<=10^9 Source…
3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 247  Solved: 174[Submit][Status][Discuss] Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完.   Input 第一行为正整数T,代…
[BZOJ4000][TJOI2015]棋盘(矩阵快速幂,动态规划) 题面 BZOJ 洛谷 题解 发现所有的东西都是从\(0\)开始编号的,所以状压只需要压一行就行了. 然后就可以随意矩乘了. #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define uint unsigned int inline int read() { int x=0;bool t=fals…
[BZOJ3999][TJOI2015]旅游(Link-Cut Tree) 题面 BZOJ 洛谷 题解 一道不难的\(LCT\)题(用树链剖分不是为难自己吗,这种有方向的东西用\(LCT\)不是方便那很多吗...) 维护一下"左子树的最小值减去右子树的最大值"的最大值就行了. 因为要支持翻转操作,所以右边反过来也支持一下,然后直接回答就行了. #include<iostream> #include<cstdio> using namespace std; #de…
[BZOJ4001][TJOI2015]概率论(生成函数) 题面 BZOJ 洛谷 题解 这题好仙啊.... 设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶子个数. 最终要求的东西就是\(\frac{f_n}{g_n}\). 考虑这个玩意怎么转移,先考虑二叉树个数,即怎么求\(f_n\). 每次我们认为新加入的点作为根节点,那么接下来只需要枚举其左右子树大小就行了,所以得到: \[g_n=\sum_{i=0}^{n-1}g_ig_{n-1-i}\] 然…
[BZOJ3997][TJOI2015]组合数学(动态规划) 题面 BZOJ 洛谷 题解 相当妙的一道题目.不看题解我只会暴力网络流 先考虑要求的是一个什么东西,我们把每个点按照\(a[i][j]\)拆成若干个点,每个具有二维偏序关系的点之间连一条边,于是我们就有了一个\(DAG\),要求的就是\(DAG\)的最小链覆盖. 然后又有最小链覆盖等于最大独立集,所以本质上就是求一个最大的集合满足任意两点之间不存在二维偏序. 于是问题变成了从左下角到右上角找到一条路径使得路径权值最大. 这个东西可以简…
[BZOJ3996][TJOI2015]线性代数(最小割) 题面 BZOJ 洛谷 题解 首先把式子拆开,发现我们的答案式就是这个: \[\sum_{i=1}^n\sum_{j=1}^n B_{i,j}A_iA_j-\sum_{i=1}^n A_iC_i\] 发现\(A\)是\(01\)矩阵,再结合数据范围一脸一个最大权闭合子图的形式. 然后这里有两种做法, 第一种是无脑版本,对于每个\(B_{i,j}\)都建立一个新点. 第二种就手动解一下方程,点数稍微少点,边数一样. #include<ios…
题目链接 bzoj4001: [TJOI2015]概率论 题解 生成函数+求导 设\(g(n)\)表示有\(n\)个节点的二叉树的个数,\(g(0) = 1\) 设\(f(x)\)表示\(n\)个节点的二叉树叶子节点的个数,\(f_0 = 0,f_1 = 1\) 那么\(ans = \frac{f_i}{g_i}\) 对于\(g_i\) 考虑有一颗\(n\)个点的二叉树,由于左右字数都是二叉树,枚举左右子树的点数 \[g_n = \sum_{i = 0}^{n - 1}g_ig_{n - i -…
[LG3973][TJOI2015]线性代数 题面 洛谷 题解 正常解法 一大堆矩阵乘在一起很丑对吧 化一下柿子: \[ D=(A*B-C)*A^T\\ \Leftrightarrow D=\sum_{i=1}^n(\sum_{j=1}^na_j*b_{j,i}-c_i)*a_i\\ \Leftrightarrow D=\sum_{i=1}^n\sum_{j=1}^na_i*a_j*b_{i,j}-\sum_{i=1}^na_i*c_i \] 分析一下我们选或不选某个数的贡献: 因为\(\for…
[BZOJ3996][TJOI2015]线性代数 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D  Input 第一行输入一个整数N,接下来N行输入B矩阵,第i行第J个数字代表Bij. 接下来一行输入N个整数,代表矩阵C.矩阵B和矩阵C中每个数字都是不超过1000的非负整数. Output 输出最大的D Sample Input 3 1 2 1 3 1 0 1 2 3 2 3 7…
[BZOJ3998][TJOI2015]弦论 Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个.T=1则表示不同位置的相同子串算作多个.K的意义如题所述. Output 输出仅一行,为一个数字串,为第K小的子串.如果子串数目不足K个,则输出-1 Sample Input aabc 0 3 Sample Output aab HINT N<=5*10…
[BZOJ3997][TJOI2015]组合数学 Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. Input 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有N行M列,接下来N行每行M个非负整数,表示此格子中财宝数量,0代表没有 Output 输出一个整数,表示至少要走多少次.…
3998: [TJOI2015]弦论 题目:传送门 题解: SAM的入门题目(很好的复习了SAM并加强Right集合的使用) 其实对于第K小的字符串直接从root开始一通DFS就好,因为son边是直接根据字符存的呀,相当于自带字典序,直接从‘a' 开始找. 一开始初始化一下从当前状态出发所能走的路径数(也就是能构成多少个字符串啦) 然后根据T= 0/1分情况来处理Right集合大小: T== 0 :那Right集合大小就直接全部等于1咯 T== 1  : 直接累加啊(原始操作) 然后具体看代码注…
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我没看,看不懂. 基本思路:我不会. 参考代码:找Oyk老师和Czj老师去. B. The background of water problem 题目大意(大写加粗的水题):给定$N$个学生和他们$K$个科目的成绩$S_i$,再给出各科目$K_i$的权重顺序$Q_i$,求排名之后,拥有id为$X$的…
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #include <string.h> #include <time.h> #include <stdlib.h> #include <string> #include <bitset> #include <vector> #include <…
2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2561 Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条…
Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring Painting standard input/output 1 s, 256 MB    x2519 C Money Transfers standard input/output 1 s, 256 MB    x724 D Tree Construction standard input/outp…
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练. 题解: E666 这个题是让求有多少个子串只含有6.寻找连续的6,然后用n*(n+1)/2求出这一段的子串个数,然后把每一段连续的加起来. 做的时候wa了很多次,原来是在n*(n+1)的地方已经超过int型了,所以需要设置类型为long long. #include <cstdio> #inc…
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 57    Accepted Submission(s): 49 Problem Description Recently, paleoanthropologists have found historical remains on an…
题意 求节点数为\(n\)的有根树期望的叶子结点数.(\(n \le 10^9\)) 分析 神题就打表找规律.. 题解 方案数就是卡特兰数,$h_0=1, h_n = \sum_{i=0}^{n-1} h_i h_{n-1-i} \(. 设叶子数量和为\)f_n\(,则得到\)f_n = 2 \sum_{i=0}^{n-1} f_i h_{n-1-i}$ 设\(H(x)\)表示\(h_n\)的母函数,\(F(x)\)表示\(f_n\)的母函数 容易得到:\[H(x) = x H^2(x) + 1…
题意 \(N \times M\)的网格,一开始在\((1, 1)\)每次可以向下和向右走,每经过一个有数字的点最多能将数字减1,最终走到\((N, M)\).问至少要走多少次才能将数字全部变为\(0\).(\(N, M<=1000, a_{i, j}<=10^6\)) 分析 结论题QAQ,不会证明... 题解 设\(d(i, j)\) \(d(i, j) = max( d(i-1, j), d(i, j+1), d(i-1, j+1) ) + a[i, j]\) 答案是\(d(n, 1)\)…
题意 给出一个\(N \times N\)的矩阵\(B\)和一个\(1 \times N\)的矩阵\(C\).求出一个\(1 \times N\)的01矩阵\(A\),使得\[ D = ( A * B - C ) * A^T \]最大,其中\(A ^ T\)是矩阵\(A\)的转置.(\(n<=500\)) 分析 好神的题.首先我们容易推出一个式子: \[ D = \sum_{i=1}^{n} \sum_{j=1}^{n} a_i \times a_j \times b_{i, j} - \sum…
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minecraft方块地图上(由很多1*1*1的方块搭起来的地图,最高5000),其中两块分别有高0.5米的激光塔,有一个高0.5米的机器人要从其中一个激光塔走到另一个.要求只能走相邻4个方向,每次不能爬上超过1格或跳下超过3格(咦,好像真的很像minecraft),要求每走到一个格子,机器人站在在这个格子的…