随笔分类 - int main()
摘要:通过子树大小和树大小的关系进行重构,复杂度均摊logn。 bzoj3600 没有人的算术 题目大意:一开始只有0,每次可以把两个数x,y组成(x,y)的形式作为新数,数(a,b)(x,y)的比较以第一维为第一关键字、第二维为第二关键字。操作有:把l和r上的数组成新数赋给k,求[l,r]中最大数的下标
阅读全文
摘要:bzoj3591 最长上升子序列(!!!) 题目大意:求1~n的排列满足其中一个最长上升子序列是给定数列的个数。 思路:考虑nlogn单调栈求lis,可以用gi[i][j]表示栈中状态是i的时候加入j之后栈的状态,可以n^2*2^n预处理。然后考虑dp,fi[i]表示状态是i的dp值,i是个三进制数
阅读全文
摘要:多维维护问题,每层换一维进行统计。 bzoj4066 简单题 题目大意:给(x,y)+A,求(x1,y1)~(x2,y2)的权值和。 思路:kd-tree,但这道题目中重建是特判的。 #include<iostream> #include<cstdio> #include<cstring> #inc
阅读全文
摘要:POJ2912 Rochambeau 题目大意:(剪子包袱锤~~)不过,多了个美丽的judge,可以随便出任何种手势。判断能否根据已知的游戏的结果选出judge。。。思路:基本用食物链,枚举每个小孩为judge,判断他为judge时在第几句话出错falt[i](即到第几句话能判断该小孩不是judge
阅读全文
摘要:Day1 T1 储能表 题目大意:已知n、m、k,求sigma(i=0~n-1,j=0~m-1)max((i^j)-k,0)。 思路:数位dp。fi[i][a][b][c]表示到第i位,和n、m的关系分别是a、b(0表示<,1表示=),和k的关系(0表示<,1表示=,2表示>)。 #include<
阅读全文
摘要:左偏树 bzoj4003 城池攻占 题目大意:一棵树,每个点有一个防御值。m个武士,有攻击力和起始的位置,攻下一个点后会向父亲进攻,攻击力大于等于一个点的防御力就可以攻下,否则死亡。武士攻下每个点后攻击力会变化,加上或者乘上一个数(乘的数保证非负)。问每个城市死亡的武士个数和每个武士攻下的点。 思路
阅读全文
摘要:bzoj2440 完全平方数 题目大意:求第k个不是完全平方数倍数的数(1不算完全平方数)。 思路:二分+容斥+莫比乌斯函数。我们可以二分x,看1~x中有几个不是完全平方数倍数的数。求这个的过程是容斥原理,我们可以用所有的数-有1个质数(分解质因数后的,下同)平方了的+有2个的-有3个的...,然后
阅读全文
摘要:bzoj4367 假期(!!!) 题目大意:有n个点在一条直线上,每一时刻可以从i走向i+1或i-1,也可以停在i参观得到wi的收益,每个点只能贡献一次收益,求0时刻在st、m时刻最大收益。 思路:f[i]、g[i]、fi[i]、gi[i]分别表示经过i时刻从st向右、向左、向左再回st、向右再回s
阅读全文
摘要:匈牙利算法 bzoj1854 游戏 题目大意:给定n个武器,每个武器有两个属性值,每个武器用一次,求最长连续递增序列。 思路:如果把属性值看作一排点,武器看作一排点,就是二分图最大匹配了。在匈牙利中有个visit数组,如果每次赋值的话,会tle,这里有一种很好的做法,就是把visit改成int,每次
阅读全文
摘要:bzoj3676 回文串 题目大意:给定一个字符串,求其中某种回文串的长度*出现次数的最大值。 思路:建立后缀自动机,用manachur求出本质不同的回文串(也就是比较使pp[i]+1的时候),然后在后缀自动机上的相应节点往上找fa,统计siz。 (这道题目中manacher不能加字符(会mle),
阅读全文
摘要:单纯形 求解线性规划最优解问题(全部转化成约束条件<=(非负条件可以是>=),并且求最大值问题) bzoj1061 志愿者招募 题目大意:给定n天,每天需要志愿者ai人;m类志愿者,从si~ti天工作,每人要ci元。求最小费用。 思路:根据题意可以列出目标函数是min sigma(i=1~m)cix
阅读全文
摘要:FFT 快速计算多项式乘法 bzoj3527 力 题目大意:给定qi,求ei=sigma(j<i)qj/(i-j)^2-sigma(j>i)qj/(i-j)^2。 思路:画个表格能发现两个三角都是可以卷积的,要求qj*1/(i-j)^2累加到ei上,但是右上角的部分要倒两次,然后就是fft了。 #i
阅读全文
摘要:bzoj4319Suffix reconstruction题目大意:给定后缀数组的sa,求原数组(仅包含小写字母)的一种方案,无解输出-1。思路:考虑sa[i]和sa[i-1],如果在原数组中sa[i]+1的排名>sa[i-1]+1的排名,sa[i]和sa[i-1]就可以是一样的字母,从小字母向大里...
阅读全文
摘要:DAY1 T1根据题目描述模拟就可以了。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxm 100 using namespace std; int ai[maxm][maxm
阅读全文
摘要:bzoj1486 最小圈 题目大意:求一个图内的某个环,使得sigma ai[i]/k(环上点数)最小。 思路:二分答案,如果sigma ai[i]-k*mid>0说明mid可以更大,每次判断的时候给所有边-mid,就成了判断负环的问题。这里用spfa普通的判法会tle,所以要用深搜版的spfa来判
阅读全文
摘要:codevs1513 皇帝的烦恼 题目大意:给定n个点成环,每个点要求染ai个颜色,要求相邻两点不能有相同颜色,求最少颜色。 思路:二分+dp。fi[i]表示i这个点和1最少相同颜色;gi[i]表示i这个点和1最多颜色,互相更新一下。如果fi[n]==0则可以(中间还要注意如果相邻两个点的和大于x也
阅读全文
摘要:置换 cow sorting题意: 有N头牛,将他们的特征值排升序,每交换两头牛,代价就是两头牛的和,求最小的代价和。思路: 赤裸裸的置换群,简单学习后,直接上手。。。记录下原数和位置,排序后,找到循环节(原数列和升序后的数列中相应多个位置的出现的数的集合完全相等即为一个循环节),个数为ci,记下这
阅读全文
摘要:bzoj4031 小z的房间题目大意:给定n*m的网格,有一些障碍点,求生成树的个数。思路:矩阵树定理直接求解就可以了。但是因为要取模所以要稍微修改一下高斯消元,行列式交换行或列的时候行列式的值要变号。#include#include#include#include#define p 1000000...
阅读全文
摘要:模拟退火 bzoj3680 吊打XXX 题目大意:给定一些绳子和绳子上的重量,求出最后绳结的坐标。 思路:这个位置就是广义费马点,就是所有点到这个点的距离*每个点的权值最小的点。模拟退火,各种调常数。 #include<iostream> #include<cstdio> #include<cstr
阅读全文
摘要:CODEVS1056 圆内三角形统计 题目描述:圆周上有N(N<=100)个点,用线段将它们彼此相连。这些线段中任意三条在圆内都没有公共交点,问这些线段能构成多少个顶点在圆内的三角形? 思路:c(n,6).每一个园内三角形的三边都是圆上不同的点,所以就是从n个点中取6个的组合数。 #include<
阅读全文