自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 收藏
  • 关注

原创 New Site

现在在这里更新:https://chrt.github.io/

2017-02-15 09:24:14 829

原创 [bzoj 1758] [Wc2010]重建计划

如果莫名地TLE了可以看一看本文. 数据经过加强后, 以前许多AC代码会超时. 新站没被百度收录, 所以在这里复制一份, 希望能帮到您.https://chrt.github.io/2017/04/09/bzoj1758-rebuild/一棵n个结点, 边带权的无根树, 求包含[L,U]条边的简单路径的最大平均权值 (权值和/边数), 保留3位小数. (n≤10^5)

2017-04-09 21:16:13 1001 3

原创 [CodeVS 1343] 蚱蜢:Splay Tree

题意:N个数,J个操作(2 ≤ N ≤ 100 000, 1 ≤ J ≤ 100 000)。每个操作将第a个数往前或后移动b个,并询问跨越的这些数中的最大值,保证操作有效。要求支持区间查询、增添删除,Splay是个不错的选择。把第a个数删掉,再插到第b个数前面就好啦。有没有更有针对性的做法呢?

2017-01-10 18:47:08 531

原创 [bzoj 3224] Tyvj 1728 普通平衡树(Splay)

题意:维护一些数,支持这些操作:插入x、删除x、查询x的排名(多个x则输出最小者)、查询排名为x的数、查询小于x的最大数、查询大于x的最小数。初始序列为空,操作数不超过10^5,每个数的数据范围:[-1e7,1e7]。写一棵普通的平衡树就好了。由于是想练习一下Splay Tree,就决定是它了。

2017-01-08 14:11:39 736

原创 [bzoj 1011] [HNOI2008]遥远的行星:近似算法(一种正确性显然的非乱搞的科学做法)

题意:给N个数Mi(1≤N≤10^5, 0≤Mi≤10^7)和实数a(0.01<a≤0.35),对每个1≤i≤N求∑MiMj/(i-j) (j=1,2,...,ai),相对误差不超过5%即可。流传着不少有意思的乱搞做法,比如“前2000个暴力算,后面的把分母统统当作i-ai/2”等等。本文给出一种时间复杂度略差,但显然可以保证相对误差不超过5%的做法。

2017-01-01 16:09:11 580

原创 Pollard的rho启发式因子分解算法 & [CodeVS 4939] 欧拉函数:Miller-Rabin + Pollard-rho 质因数分解

Pollard的rho启发式因子分解算法用于给出整数的一个因子。在一定的合理假设下,如果n有一个因子p,可在O(p^(1/2))的期望时间内可找出n的一个因子p。本文描述了Pollard-rho算法的步骤和原理,在一定假设下证明了其时间复杂度,并给出CodeVS 4939的题解。

2016-12-31 21:20:37 1792

原创 Miller-Rabin随机性素数测试方法 & [CodeVS 1702] 素数判定2

Miller-Rabin算法用于判定某数x是否为素数。如果x被判定为合数,它一定是合数。如果x被判定为素数,它有很大的概率是素数,此概率取决于参数。本文阐述了Miller-Rabin算法的过程和原理,并给出CodeVS 1702 素数判定2 的代码。

2016-12-31 15:57:43 698

原创 [bzoj 1008] [HNOI2008]越狱:排列组合,快速幂

题意:N个数,每个数有M种取值,问有多少状态存在相等的相邻两项。(1<=M<=10^8,1<=N<=10^12)正难则反。第一次提交WA了……又是int乘法溢出。我以为模数很小……实际上超过10^4就要警惕了。

2016-12-27 23:56:47 492

原创 Burnside引理和Polya定理 & [bzoj 1004] [HNOI2008]Cards:Burnside引理,动态规划

题意:有Sr张红色牌、Sg张绿色牌和Sb张蓝色牌,m种洗牌法(置换),两种牌相同当且仅当一种能洗成另一种,保证洗牌法满足封闭性、存在逆元,问有多少种染色方案。Burnside引理和Polya用于解决等价类计数问题。本文介绍了Burnside引理和Polya定理,给出了逻辑上严谨的证明,并在bzoj 1004中加以应用。

2016-12-27 23:35:24 583

原创 Prufer编码 & [bzoj 1005] [HNOI2008]明明的烦恼:Prufer编码,组合数学,高精度

题意:明明是个奇怪的孩子,想知道n个有标号结点(0<n≤1000)、一些结点的度数已经给定的生成树有多少棵,还不让你取模。Prufer编码在n个有标号结点无根树和长度为(n-2)且每项是不大于n的正整数的数列之间构造了一一对应。本文1. 讲解Prufer编码并给出证明。2. 给出bzoj 1005的解答和代码。

2016-12-25 14:46:17 468

原创 大步小步算法(BSGS)及扩展 & bzoj 2480

大步小步算法用于解决离散对数问题: 求满足a^x≡y(modp)的最小自然数x,其中a、p互质,或者报告无解。根据欧拉定理,a^ϕ(p)≡1(modp),所以,如果有解,必然有一个在[0,ϕ(p))内。为了简单起见,直接考察[0,p−1)。

2016-12-16 19:48:36 4723 1

原创 [bzoj 1003] [ZJOI2006]物流运输:最短路,DP

题意:m个点e条边的无向图(1≤m≤20),把货物从1运到m,一些点在有一些时段里不可用,求n天的花费最少的运输方案(n≤100)。花费等于路径长度之和加上K*路径变更的次数。无意中看过这道题的tag:最短路+DP,所以也不能完全算作是自己想出来的。QAQ“路径变更的次数”使我们想到把一段时间内不变的路径放到一起处理,划分DP的模型自然地显现出来。

2016-12-16 18:38:39 501

原创 [bzoj 3122] [Sdoi2013]随机数生成器:数论,同余,分类讨论,BSGS

题意:给四个参数p, a, b, x1,生成一个数列,以x1为首项,x[i+1] = (ax[i]+b) mod p (i>=1),问是否存在x[i]=t,如果存在,求出最小的i。0<=a, b, x1, t < p,2<=p<=10^9,p为素数。以前看过这道题,知道思路。然而AC还是不太容易啊……如果这是数学试卷上的一道数列大题,如果递推式不mod p,作为高中生的我们会求一求通项,解一个方程。

2016-12-13 19:32:47 573

原创 [NOIP 2016] 换教室:数学期望,DP

题意:一共有v间教室,e条有长度的双向通道,可能有重边和自环(v≤300,e≤90000)。n节课(n≤2000),每节课有两间教室可选,默认为c[i],可申请更换为d[i],申请要么通过要么不通过,通过的概率是p[i],所有申请在开始所有课程之前提交。求提交的申请不超过m个的前提下,依次上完这n节课途经距离的期望的最小值。

2016-12-08 13:56:24 865

原创 [bzoj 1002] [FJOI2007]轮状病毒:数学,递推,高精度

题意:n轮状病毒是这样一种病毒:n个基原子围成一圈,中间是一个核原子,基原子和核原子、基原子和相邻两个核原子之间可以有通道,任意两原子之间有且仅有一条通道,求有多少n轮状病毒(n<=100)。这不是在数同分异构体,经旋转、翻转后相同的轮状病毒视作不同的。原本觉得是矩阵树定理,数据范围也挺像O(n^3),就没深入地思考这道题。本文对此题给出了一种不用矩阵树定理的解答。

2016-12-04 16:12:03 681

原创 [bzoj 1053] [HAOI2007]反素数ant:数论,DAG上最短路

题意:设g(i) = i的约数个数,若对于某个正整数x,所有0<i<x都有g(i)<g(x),那么称x为反素数。求不大于n的最大反素数。(n<=2*10^9)暑假的时候TYQ同学提到一个有趣的概念叫做反素数,看到bzoj第一页有这道题,于是来写一写。关于约数个数,我们知道什么?约数个数定理:设x=∏pi^ai,由乘法原理,约数个数σ(x)=∏(ai+1)。

2016-12-04 14:52:55 557

原创 NOIP 2016

本文是NOIP 2016的记录。这个学期开学不久,审视内心,晚自习请假,到今天结束。很感谢东哥能批准。11月1号开始停课。我也担心花的时间比别人多,考出来比别人差。妈妈说的有道理,正是因为比别人差才要更努力。机房里校服的主色调要更换了,有些伤感。停课总体而言愉快,虽然有时我说话没把握好度,感到抱歉。CS每天很晚回家。但愿我们的成绩能使他开心,虽然我没有把握。OI之路是艰难的,也是快乐的。

2016-11-20 21:35:23 1210

原创 [CodeVS 1288] 埃及分数:IDA*

题意:求a/b的最好的埃及分数表达方式(0<a<b<1000)。加数少的比多的好,加数想等的最小分数值最大好。迭代加深搜索的经典例题。本想从分数值最大者开始扩展,这样第一个找到的即为答案,然而没办法剪枝。原先递归的边界是d == 0,结果随便弄俩数就卡住了,于是修改为d == 1。要使用long long。

2016-11-17 18:47:14 475

原创 [UVA 10905] Children's Game:贪心,排序

题意:给N个十进制数,把它们拼接在一起,要求得到的新数最大。(N<=50)刘汝佳老师说“容易想错!建议编程并提交”,于是我编了一下程,连样例都过不了。最初的想法是将十进制数当作字符串,按照字典序降序排列。90的字典序大于9,然而990 > 909。是不是把前缀排在前面总是最优呢?不是,比如123和1234,1234123 > 1231234。两串长度相等时,按照字典序直接贪心是正确的。

2016-11-17 10:11:43 351

原创 高精度类 BigNumber

很少写这东西,昨天下午尝试了一下。本高精度类支持有/无符号大整数加、减、乘、比较,特点是简短。有符号整数采用补码实现。

2016-11-17 08:12:10 3691

原创 [NOIP 2007] 矩阵取数游戏:DP,高精度

题意:n*m(n, m<=80)的矩阵,每次从各行首或尾取一个数,获得分值Sigma 数值*2^i,i是取数次数,从1算起。决策:从行首或行尾取一个数。各行之间独立,每行单独考虑,可以用DP解决。整个程序DP就几行,高精度代码占主要篇幅……其实我是为了测试刚写的高精度类才写这题。用了高精度乘法。看了其他解答,发现没必要,因为2*2=2+2。

2016-11-16 23:22:33 401

原创 [CodeVS 2185] 最长公共上升子序列:DP

题意:求两个序列的最长公共严格上升子序列的长度。NOI 题库里有这道题,序列长度<=500。容易想到一个O(n^3)的做法:设f[i][j]为a[0..i]、b[0..j]以i、j结尾的最长公共严格上升子序列的长度,同时维护g[i][j] = max { f[k][j] [k<=i & a[k]=b[j]] } + 1。实现中,我把g滚动了,于是需要逆序枚举。

2016-11-16 11:57:00 407

原创 [XJOI NOIP2016提高组冲刺题1] 排队:倍增,set or 线段树

题意:一棵有根树,人从根结点出发,每个结点只能有一个人,每个人尽量向叶子走(以膜拜吉丽QAQ),如果有多个结点,则选择编号最小的。实现两种操作:1. 把x个人放到根结点,问第x个人停留在哪里。2. 取出编号为x的结点里的人,问除他以外有多少个人会移动。保证操作合法,树的结点数n和操作数m不超过100000。手动模拟后发现,对子结点排序,人按照后序遍历的顺序依次考虑所有空结点。

2016-11-15 17:46:28 613 1

原创 [NOIP 2011] 聪明的质检员:二分,前缀和

题意:给一个含n(n<=200000)块矿石的序列,每块矿石有重量和价值。有m(m<=200000)个区间,对于某个w,每个区间的检验值为重量不小于w的矿石数量乘这些矿石的价值之和。总的检验值为各区间检验值之和。求检验值与标准值S之差的绝对值最小为多少。检验值是w的函数,并且单调递减。因此,可以二分w,使检验值逼近S,间接地求得最小的差值。如果检验值只定义为价值之和或数量,大概能迅速想到前缀和。

2016-11-14 21:04:36 530

原创 [NOIP 2011] Mayan游戏:搜索,模拟

题意:寻找一个用n步(0<n<=5)完成5*7的Mayan游戏的字典序最小的方案。每个方块可以左移、右移,至多5步,共有少于5.6亿个可能的情形。3秒内搜一搜是可行的。怎样消除方块呢?由于要求一次性消完所有能消的方块,而且横、竖有公共部分则全部消掉,所以不能找到就消。找到连续三个就标记,每次循环根据标记进行清除,循环到不能再消。

2016-11-13 23:18:38 501

原创 [CodeVS 4927] 线段树练习5:两个Lazy Tag的线段树

题意:维护一个长为n(n<=100000)的数列,支持区间加减、区间赋值两种修改,区间最小值、区间最大值、区间求和三种查询。发现自己记不清线段树区间赋值怎么写了,而且感觉自己的写法和刘汝佳老师的蓝书上的代码不一样,于是做一做这道题。刘汝佳老师定义赋值标记的优先级高于累加标记,于是同时有两个标记的时候需要先考虑赋值标记,再加上累加标记的值。我的写法略有不同。

2016-11-13 17:45:36 661

原创 [IOI 1998] Camelot:最短路

题意:8*8的棋盘上有一个王和0或多个骑士,骑士走日,王上下左右斜,王和骑士相遇后可以骑骑士的马,此后步数不再单独计算。求王、所有骑士汇集在一点的最小总步数。USACO Training上有强化版,棋盘变为最大26*40。原题可以三次方暴力枚举,加强后怎么做呢?设汇集点为P,骑士的集合为A,a原位置为s_a,k代表King,则

2016-11-11 17:06:45 657

原创 [poj 1901] Hypertransmission:扫描法,适度暴力

题意:空间中有n个整点(1<=n<=1000),点分为两类,如果以某点为球心,R为半径,球面及球内与它不同类的点多于与它同类的点,那么称该点是不稳定的。同类点包括自己。问至多有多少个点是不稳定的,不稳定点最多时R的最小值是多少。根据数据范围,我们需要一个O(n^2)的算法。刘汝佳老师说这是扫描法……怎么扫描呢?把问题简化到二维,发现仍不会做。简化到一维,还是不会做……

2016-11-10 16:26:23 488

原创 [hihoCoder 1190] 连通性·四:点-双连通分量

题意:求点-双连通分量,输出每条边所在双连通分量中边的最小编号。先前AC了,修改了一个地方,WA。本地对拍,段错误。以为是dfs爆栈,结果是数组越界......那之前是怎么AC的呢?修正了数组的越界,就AC了。验证了我的理解:pre[v] < pre[u]用来确保反向边只在第一次访问时入栈,换成判断bccno[i->id]是否为0效果是相同的。

2016-11-10 15:10:54 395

原创 [poj 2559] Largest Rectangle in a Histogram:单调栈

题意:求直方图中矩形的最大面积。从左往右扫描,用栈维护左边所有可用的高度。高度是递增的,因为,如果i>j且h_i<h_j,j一定优于i。如果当前实际高度不矮于栈顶,那么会有些高度从现在开始不可用。更新答案,剔除它们,以当前高度为可用高度,横坐标尽可能小,压入栈中。换言之,用单调栈维护每个横坐标左、右比它矮的最近的位置。原本需要从左往右、从右往左各做一次,针对此问题,可通过加入以前的横坐标进行优化,只往一边扫。

2016-11-10 09:00:38 404

原创 Floyd判圈算法及其证明

Floyd判圈算法可用于判定链表是否有环。如果有环,可以找出环的起点和大小。首先,让我们确认一个事实:两个人在环形跑道上同向而行,一前一后,速度不等,则快的那个一定能追上慢的那个。 设两人相距x,跑道周长为C,令快者的速率(2v)等于慢者(v)的两倍,则追及时间t=x/(2v−v)=x/v,由于vt=x≤C,从开始计时到第一次相遇,慢者至多跑一圈。

2016-11-09 15:41:50 3305

原创 [NOIP 2003] 传染病控制:创造性地DFS,最优性剪枝

题意:给出一些关系,表示A能把病传染给B,这些关系形成树,每个周期疾病向下传染一层。每个周期开始的时候可以切断一个传染,初始只有1号带病,求最少患病的人数。1<=人数<=300。开始想贪心或DP,无果,CS告诉我们这道题可以搜索搞定,大家一起研究了一下CS几年前迷一样的Pascal代码。DFS挺简单,思维的障碍在于我局限于树形DP的模型,总想枚举一下每棵子树分别何时切断,没想到以层为单位搜索。

2016-11-08 14:55:53 1011

原创 [bzoj3680] 吊打XXX:模拟退火 or 模拟力学情景

题意:n个(n<=10000)质量分别为mi的质点的坐标分别为(xi,yi)(数据均为整数),每个重物连着一根绳子,所有绳子有一个公共的绳结,绳结只能在一个与地面平行的平面上移动,质点不会落地,求绳结最终停留的坐标,保留小数点后三位。−100000≤xi,yi≤100000。可以用模拟退火,更简单的方法是模拟:给绳结一个初始位置,求受力,作用一段时间,产生一段位移。嗯,都叫模拟......看是想模拟热力学还是力学

2016-11-08 13:54:37 351

原创 [bzoj 1833] [ZJOI2010]count 数字计数:数位DP

题意:求[a, b]之间的所有整数中各个数码出现了多少次。(1<=a<=b<=10^12,a, b是整数)考虑[1, x)内各个数码出现了多少次。设f[i][j][k]为以j开头的(i+1)位十进制串中k出现的次数,递推。 也可以简化为f[i],因为每个数码出现的次数相等。本文对两种均给出了实现。[1, x)内的数可分为三类: 1. 位数少于x。 2. 最高位小于x。 3. 和x有公共的前缀。

2016-11-07 16:02:29 370

原创 [bzoj 1026] [SCOI2009]windy数:数位DP

题意:区间[a, b]里有多少个不含前导0的十进制整数任意相邻两位之差的绝对值不小于2?(1<=a<=b<=2,000,000,000,a, b是整数)前几天做XJOI模拟赛中有关字典序的一道题,发现可以按照某种顺序从高位向低位统计。十进制数之间的比较,把前导0补齐,实际上就是字符串的比较。举例,如果允许前导0,小于34023的自然数可以这样生成(下划线表示0~9间任意数码):

2016-11-07 10:50:39 338

原创 [bzoj 1879] [Sdoi2009]Bill的挑战:状压DP,自创数学公式(?)

题意:给N个(1<=N<=15)含小写字母、?的长度不超过50的等长字符串,求有多少个含小写字母的字符串和恰好K个串匹配。?可匹配任意字符。我写了个奇怪的状压DP并发现一个计算恰在n个集合中出现k次的元素数目的数学公式......人生第一次发明数学公式(?),不过不会证......

2016-11-06 20:06:21 565

原创 [bzoj 1226] [SDOI2009]学校食堂Dining:状态压缩的奥妙

题意:N个人(N<=1000)排队吃饭,第i个人允许第i+1~i+b[i]个人先吃(0<=b[i]<=7),每个人有口味t[i],做每个人的菜的时间是他的口味和所做的上一个人的菜的口味的函数,不计算第一个人的时间,求最小总时间。没能自己做出来。进行了如下尝试: 1. 设f[i][S]为前(i-1)个人吃了,第i个人没吃,后面7个人状态为S。没有记录最后一个人是谁,无从转移。

2016-11-05 16:52:38 863

原创 [NOIP 2005] 篝火晚会:大胆猜想,小心求证

题意:N(N<=50000)个数1, 2, …, N围成一个圈,每次可以指定m个数<b1, b2, ..., bm>,把b1放到b2的位置,把b2放到b3的位置,……把bm放到b1的位置,代价为m。要求每个数和指定的两个数相邻,求最小代价或报告方案不存在。为什么要看题解呢?看到这题在CodeVS上分在大师级别,又听说要用到群论,题意还没搞明白就失去了信心TAT 如果全是自己想出来的就好了。考虑简化问题。

2016-11-04 16:08:20 1666

原创 [NOIP 2010] 乌龟棋:动态规划

题意:直线上有等间距的N个点,每个点有一个分数,落在一个点上能获得该点的分数。从第一个点跳到第N个点,每次可以向前跳1、2、3、4步,每种步距可以使用的次数有限,且保证用完所有的会跳到第N个点。求最大分数。N<=350,每种步距的使用次数<=40。枚举步距的排列是阶乘级别的,但是,注意到只要每种步距已使用的次数确定,位置就确定了。因此,可以以每种步距已使用的次数为状态。

2016-11-04 10:01:03 363

原创 [NOI 2001] 炮兵阵地:状压DP

题意:在一个N*M的矩阵中的空地放两两不能相互攻击的炮兵,两个炮兵能相互攻击当且仅当它们在同行或同列且距离小于等于2,求最多能摆多少。(N<=100,M<=10)据说是状压DP经典题。由于一行至多有10列,所以不妨以两行为状态。直接用二进制表示状态(2^10)不可行,因为合法状态只占少数。但我们可以事先搜出所有合法状态。一个小优化是用位运算判断是否能够转移。

2016-11-04 09:09:27 334

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除