- 博客(40)
- 收藏
- 关注
原创 [bzoj4514][SDOI2016]数字配对
题目大意有 n 种数字,第 i 种数字是 ai、有 bi 个,权值是 ci。 若两个数字 ai、aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的价值。 一个数字只能参与一次配对,可以不参与配对。 在获得的价值总和不小于 0 的前提下,求最多进行多少次配对。二分图!我们来考虑配对条件: 如果记f(x)表示x分解质因数后的项数(注
2016-04-28 20:47:36 1954
原创 [bzoj4513][SDOI2016]储能表
题目大意求∑n−1i=0∑m−1j=0max(i xor j−p,0)\sum_{i=0}^{n-1}\sum_{j=0}^{m-1}max(i\ xor \ j-p,0)数位DP首先先把n和m都减一。 接着分解成二进制。 设f[i][s1][s2][s3][s4]表示做到第i位,此时有多少二元组(a,b)满足以下条件: s1=0,目前a已经小于n。s1=1,目前a等于n。 s2=0,目前
2016-04-28 20:20:29 1233
原创 错排公式
前言错排公式,即把n本可区分书打乱使得每本书不在原本位置的方案数。容斥原理得到的递推式我在某题题解里讲过,现在复制过来。 设dp[i]表示i个元素的错排方案数。 什么意思呢?就是关于i的排列其中不存在任意的a[j]=j。 我们可以使用容斥原理: 例如dp[n],其实就是要满足n个条件——第i个条件为a[i]!=i 那么合法方案数=至少不满足0个条件-至少不满足1个条件+至少不满足2个条件-
2016-04-25 20:04:39 886
原创 2016.4.23初中部GDOI组模拟赛总结
比赛过程看题时间,并列表。 t1,看完题就知道是把航线当点然后弄最小路径覆盖。网络流我是可以无脑码的,然后这题还有一个弗洛伊德,不难打。预估:100。 t2,看完数据觉得这题很迷……64也不能折半呀……而我除了指数级算法以外毫无想法。预估:20。 t3,奥妙重重……想着有时间去打表看看有什么规律,先预估50分。 t4,看起来像码农题呀?仔细思考20min后得到一个动态树剖做法。 此时看看时
2016-04-25 19:49:26 537
原创 [JSOI2016]轻重路径
题目大意给定一颗二叉树。 每次删除一个叶子节点,并要求输出所有重链指向结点编号之和。 初始也要输出一次。 初始时,如果一个结点的两个儿子大小相同,则选择左儿子为重儿子。 一次删除操作后,如果一个结点的两个儿子大小相同,则不改变原先的重儿子选择。发现如果删除一个叶子,重儿子指向可能会发生改变的一定是该结点到根节点的路径上的结点。 其中表现为——路径上的重边可能会变成轻边。 这个就不好处理…
2016-04-25 19:18:56 1746
原创 [JSOI2016]无界单词
题目大意一个只由a和b组成的长度为n的字符串,如果kmp后next[n]=0,则称之为无界单词。给定n和m,求长度为n的无界单词个数以及第m小的。第一问正难则反! 设f[i]表示长度为i的无界单词数量。 那其实只需要算出有界单词数量,再从总数里减去即可。 枚举j为最小的使字符串前j个与后j个相等。 一个其实并不太显然的性质: j一定小于等于i/2。 为什么呢? 嘿嘿自己想想吧(是我懒得
2016-04-25 19:05:14 1229
原创 [JSOI2016]飞机调度
题目描述作为一个旅行达人以及航空公司的金卡会员,你每一年的飞行里程可以绕赤道几周了。你发现,航空公司为了提高飞机的使用率,并不是简单的一条航线使用一架飞机来回飞,而是会让同一架飞机连续不停地飞不同的航线,甚至有的时候为了能够完成飞机的调度,航空公司还会增开一些临时航线——在飞机转场的同时顺路捎一些乘客。你研究了一下GDOI著名航空公司GD Airways的常规直飞航线,你想知道,在最佳调度方案下,G
2016-04-25 18:40:19 1215
原创 后缀数组复习小记
前言学习了SAM为什么要学习SA?(没复习之前我就是传说中的只会SAM不会SA的蒟蒻) 因为有些问题SA可做SAM不可做。 (以下开始扯淡,大家可以跳过前言部分了…… 我还记得我上一次打SA是将近一年前的GDOI赛场上—— day1只考了50分的我对比同年级其他神犇十分失落。day2我开始看题: t1sb广搜呀! t2sbtarjan呀! t3奥妙重重,字符串的题……恩,我只会sa,想
2016-04-22 19:40:05 672
原创 [bzoj4516][SDOI2016]生成魔咒
题目大意初始有一个空串。每次在末尾添加一个字符(字符集是[1,1000000000]的数字),并询问当前有多少本质不同的子串。一眼SAM虽然字符集很大,但是可以map耶有木有。 n log n就可以过啦,还可以在线的很兹瓷嘛! 为了练习SA由于我是蒟蒻,所以这题我最终打的是第二眼看出来的算法——后缀数组 首先它没有强制在线! 于是可以先把最终串搞出来。 然后把最终串倒过来。那么问题就被转化
2016-04-22 19:07:21 1145
原创 [bzoj4517][SDOI2016]排列计数
题目大意a是关于n的排列。 问有多少符合条件的排列——恰有m个位置满足a[i]=i错排设dp[i]表示i个元素的错排方案数。 什么意思呢?就是关于i的排列其中不存在任意的a[j]=j。 答案显然就是Cmn∗dp[n−m]C_n^m*dp[n-m] 组合数快速算可以预处理阶乘以及阶乘的逆元。 怎么预处理出dp呢? 我们可以使用容斥原理: 例如dp[n],其实就是要满足n个条件——第i个条
2016-04-21 20:45:51 1044
原创 [bzoj4542][HNOI2016]大数
题目大意给定字符串 每次询问该字符串的一个子串中有多少子串转为数字后是p的倍数。 p<10^10且是质数,每次询问p相同。式子转化如果对[l,r]询问那么答案相当于 ∑ri=l∑rj=i(∑jk=is[k]∗10j−kmodp==0)\sum_{i=l}^r\sum_{j=i}^r(\sum_{k=i}^js[k]*10^{j-k}\mod p==0) ∑ri=l∑rj=i(10j∗∑jk=
2016-04-20 20:57:44 980 1
原创 [bzoj4524][CQOI2016]伪光滑数
题目描述做法先把质数都筛进数组p。 我们设f[i,j]表示分解后最大质数为p[i],分解的结果是j项的数的集合。 为了顺利的推出f[i,j]我们还要设g[i,j]表示f的前缀和。 先让我们重定义一些符号: 1、a+b返回集合a与集合b的并(a与b均为集合) 2、a*b表示集合a内所有数乘上b(a为集合,b为一个数) 那么转移是这样的: f[i,j]=∑jk=1g[i−1,j−k]∗p[
2016-04-20 19:15:44 1153
原创 [bzoj4522][CQOI2016]密钥破解
题目描述快速分解做pollard_rho算法后模拟题意。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;ll e,d,n,nn,r,c,a,xx,yy,t,p,q,mo;void gc
2016-04-20 12:46:39 911
原创 快速分解算法
算法思路太懒了不写 参见JZOJ4458下的pdf代码 while (1){ a=rand()%1000+2; r1=r2=2; do{ r1=f(r1); r2=f(f(r2)); p=gcd(abs(r2-r1),n); if (p>1) bre
2016-04-19 18:41:14 954
原创 [实时更新]花园挑战赛进程
目的本蒟蒻出了三道水题,为了促进大家帮我验题以及让我评估题目的难度,所进行的竞赛。 面向群众:ZSJZ的初中部水平较高同学。 “没人能够独立想出三题的任意一题”规则按照难度排序 easy:玻璃花园 normal:风暴花园 hard:磁力花园 每个人只能选择一种难度,然后挑战者将会获得题面doc。在时限内(时限通常定为一周)独立想出所挑战难度的题目,挑战成功。否则,超时的人可以获得题目的题
2016-04-18 18:46:51 726
原创 习用之语
题目大意给出若干个四个字符组成的字符串。 求有多少对仅有m位不同。DP设f[i]表示恰有i位不同的对数。 只有i位不同,意味着如果无视其中的i位,总有一种方案使得两个字符串完全一致。 于是暴力枚举无视哪i位,然后将无视后的字符集排序统计相同对数和记为t。 注意其中可能包括恰有j位不同的对(j<ij<i)所以要减掉。 也就是f[i]=t−∑i−1j=0Ci−j4−jf[i]=t-\sum_{
2016-04-18 18:02:38 570
原创 IOIOI卡片占卜
题目描述K理事长很喜欢占卜,经常用各种各样的方式进行占卜。今天,他准备使用正面写着”I”,反面写着”O”的卡片为今年IOI的日本代表队占卜最终的成绩。 占卜的方法如下所示: 首先,选择5个正整数A,B,C,D,E。 将A+B+C+D+E张IOI卡片排成一行,最左侧的A张卡片正面朝上,接下来B张反面朝上,接下来C张卡片正面朝上,接下来D张反面朝上,最后E张正面朝上。如此排列的话,从左侧开始顺次为
2016-04-18 14:09:35 1222 2
原创 备用钥匙
题目描述你知道Just Odd Inventions社吗?这个公司的业务是“只不过是奇妙的发明(Just Odd Inventions)”。这里简称为JOI社。 JOI社有N名员工,编号从1到N。所有员工的工作时间从时刻0持续到时刻M,时刻0和时刻M的时候,所有员工都必须在公司内。 某天,出于巧合,JOI社的每个员工都要出行恰好一次。员工i(1<=i<=N)在时刻Si离开公司,时刻Ti回到公司。
2016-04-18 14:03:51 693
原创 装饰大楼
题目大意现在有一个n的排列。 设f[i]表示以i为结尾的最长上升子序列。 给定你f数组的其中n-1项(你不知道缺的是第几项),求原本的f数组有多少种可能性。仔细想想首先,我们要清楚什么样的f数组能够对应出一个n的排列。 根据DP,很容易知道对于任意的j线性算法首先判无解, 如果出现两处差1那么无解比如: 1 3 5 如果出现一处差2及以上那么无解比如: 1 4 那么有解的情况就是:
2016-04-18 12:46:49 865
原创 JZOJ4446
题目大意有n个数,你可以进行任意次操作,每次操作如下: 将a与b两个数变为a and b与a or b两个数。贪心我们枚举四种不同情况,然后发现,一次操作的本质是把二进制上的1移走。 于是我们得到一个贪心算法:把1尽量往前挤。 具体看标程!#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using
2016-04-15 20:46:15 637
原创 JZOJ4444
题目大意询问树上两点的路径上小于/等于/大于所给定值k得点的数量(每次询问k不一定相同) 强制在线主席树以计算小于k为例: u到v的路径上小于k的点的数量=>u到根节点小于k的点的数量+v到根节点小于k的点的数量-2*lca(u,v)到根节点小于k的点的数量+lca(u,v)的权值是否小于k 然后裸的主席树#include<cstdio>#include<algorithm>#includ
2016-04-15 18:32:16 969
原创 基因合成
题目描述回文自动机首先,我们可以认为,每个最终串都是进行若干操作后进行了一次第二个操作后,再在两端插入而得到的。 先对最终串插入回文自动机上,然后做动态规划。 我们设f[i]表示i这个结点所代表的回文串最后一次操作是第二个操作需要多少个操作得到。 注意偶数树的根节点f值为1。 fa[i]表示其在回文树上的父亲,pre[i]表示其最长长度不超过其的长度的一半的回文后缀。pre怎么求呢?显然沿着
2016-04-15 12:41:00 583
转载 用SAM建广义后缀树
原文写的还比较详细,所以本蒟蒻就不再自己写一个了…… 用SAM建广义后缀树例题TJOI的单词#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const
2016-04-14 19:54:13 1834
原创 染色
题目大意给定一颗树,每个点默认白色,有两种操作。 把一个点染黑(不保证此时该点为白色) 询问一个点与所有黑点的距离和树剖先把原树转化为有根树。 然后询问一个点u,就是枚举每一个黑点v 然后贡献为d[u]+d[v]-2*d[lca(u,v)] 记录黑点的总个数和深度和,前两项很容易求和,最后一项呢? 我们尝试枚举u到root路径上的每一点w,设size[w]表示w是多少个黑点的祖先。 那
2016-04-14 19:30:33 669
原创 [bzoj2440][zsoi2011]完全平方数
题目大意找到从小到大第k个不含有平方因子的数。二分答案+容斥原理首先我们可以很容易想到二分答案,然后转化为一个判定性问题。 那么现在要解决的是如何求1~n内有多少不含平方因子的数。 可以想到容斥原理。 即ans=∑(−1)i∗n以内含有至少i个平方因子的数ans=\sum(-1)^i*n以内含有至少i个平方因子的数莫比乌斯函数观察上面的式子,转化一下 ans=∑√ni=1n/(i∗i)∗(−
2016-04-13 21:26:59 742
原创 [bzoj3673]可持久化并查集
题目大意实现一个可持久化并查集做法用可持久化线段树或平衡树之类的维护一个可持久化数组就好了。 这里我用了rope大法#include<cstdio>#include<algorithm>#include<ext/rope>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;using namespace __gnu_cxx;co
2016-04-13 19:52:41 897
原创 不是回文串
题目大意把APIO2014的回文串条件改为无限制。 该题还要限定出现次数大于1。 求答案。SAM裸题建出SAM。 不过要额外维护一个mxstep代表从根节点走到自动机上一个结点的最长路。 然后统计size。 注意的是据说这题不用桶排会超时。 接下来扫描每一个结点,如果其size大于1,就让mxstep[i]*size[i]与ans比较。#include<cstdio>#include<
2016-04-12 18:55:02 534
原创 K小数查询
题目大意兹瓷区间加和区间求k小。分块大法好我们将序列分块,每一块维护add标记和排序后的序列。 对于区间加,跨过整块就直接打标记,多余部分暴力修改然后重构所在块。 对于区间求k小,显然可以二分答案,然后转化为判定问题。 在一个块内求#include<cstdio>#include<algorithm>#include<cmath>#include<ctime>#define fo(i,
2016-04-11 20:31:53 926
原创 染色配对
题目大意每个点属于两个极大团。 团的定义是团内所有点两两间有连边。 极大团即不被任意更大的团所包含的团。 求该图的一般最大匹配,并输出匹配方案。神奇的方法我们把点看做边,把极大团看做点。 如果点i属于j、k两个极大团,那么就在j与k之间连一条编号为i的无向边。 现在我们要把每条无向边定向,其中最终一条编号为i的边如果是从j指向k那么代表原图中i这个点要与极大团j中的结点匹配。 设d[i]
2016-04-11 18:10:53 651
原创 奇妙的数列
题目描述线性做法我们设left[i]表示最大的k#include<cstdio> #include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace
2016-04-11 14:09:03 571
原创 暴走的图灵机
题目描述做法m代表T串的长度。 一个显然的做法是设g[i]表示i次操作后左手串所包含T串的个数。 则g[i]=g[i-2]+g[i-1]+c 其中c表示跨越中间线(即隔开i-2和i-1次操作后左手串的那条线)的所有串中T串的数量。 设f[i]表示i次操作后左手串的长度。 仔细观察发现,当f[i-2]和f[i-1]都不小于m后,c的循环节为2。 然后先暴力找到最早的id满足f[id]比2m
2016-04-11 14:03:44 601
原创 J友
题目大意你初始在(0,0)。 每个单位时间可以走向任意一个四连通格子。 问时刻n恰好在(x,y)的方案数。 答案模m。组合数取模显然,我们枚举向上走了多少步,就能计算出应该向左/右/下走多少步。 假设分别为p1,p2,p3,p4,那么相当于一个全排列。 由于对组合数取模比较熟悉,所以把全排列公式变成组合数相乘。 Cp1p1+p2+p3+p4∗Cp2p2+p3+p4∗Cp3p3+p4C_{
2016-04-06 21:13:44 607
原创 关于笛卡尔树及Treap的线性构造法
前言大家到知道笛卡尔树。 而且我们也可以把treap当作笛卡尔树。 现在将介绍笛卡尔树的线性构造法。线性构造维护笛卡尔树从根开始一直往右走的那一条链,这个用单调栈维护。 每次往栈顶的右儿子加点。 然后类似treap一样,就是模拟treap的旋转。 可以看代码理解。fo(i,1,n){ j=0; while (top&&fix[i]<fix[sta[top]]
2016-04-06 20:08:01 2831
原创 [bzoj3223]文艺平衡树
题目大意维护序列。 需要兹瓷区间翻转。treap大法好嘿嘿嘿裸题。 注意遍历treap的时候也要down标记啊!#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;int left[maxn],right[ma
2016-04-06 20:02:48 637
原创 有趣的有趣的家庭菜园
题目描述职业经营家庭菜园的JOI君每年在自家的田地中种植一种叫做IOI草的植物。IOI草的种子在冬天被播下,春天会发芽并生长至一个固定的高度。到了秋天,一些IOI草会结出美丽的果实,并被收获,其他的IOI草则会在冬天枯萎。 JOI君的田地沿东西方向被划分为N个区域,从西侧开始的第i个区域中种植着IOI草i。在第i个区域种植的IOI草,在春天的时候高度会生长至Hi,此后便不再生长。如果IOI草i会结
2016-04-06 19:13:20 1510
原创 愉快的logo设计
题目描述K理事长正在思考日本信息学奥林匹克竞赛选手的应援道具的logo问题。某天,K理事长突发奇想,想要设计一个用’J’,’O’,’I’三种文字环形排列的logo,意为希望选手能从JOI中收获快乐的意思。 (注:“环形地”在日文中的表述为“円状に”,“円”读作“en”,再加上“JOI”三个字即为“enjoy”……) 如下所示,对于任意非负整数k,我们定义标号为k的JOI序列Sk为: ·S0为’
2016-04-06 19:04:32 626
原创 复制&粘贴2
题目描述文本编辑器的一个最重要的机能就是复制&粘贴。JOI社现在正在开发一款能够非常高速地进行复制&粘贴的文本编辑器,作为JOI社一名优秀的程序猿,你担负起了复制&粘贴功能的测试这一核心工作。整个JOI社的命运都系在你的身上,因此你无论如何都想写出一个正确且高速的程序来完成这项工作。 具体的做法如下所示。文件的内容是一个字符串S,对其进行N次复制&粘贴的操作,第i次操作复制位置Ai和位置Bi之间的
2016-04-06 19:02:59 633
原创 我的天
题目大意每次选择一次区间让区间内的人人两两认识(已经认识过的不会重复认识) 并在每次操作后输出增加了多少对认识的人。抖机灵我们设left[i]表示[left[i],i-1]的人都与i认识。 我们知道我们只需要求出每次操作后一共有多少对人认识,然后作差输出即可。 而且ans=∑ni=1i−left[i]ans=\sum_{i=1}^ni-left[i] 如果每次选择了[l,r],那么相当于让区
2016-04-06 19:00:29 414
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人