自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NOIP2016 滚粗记

pay my debts.

2016-11-28 20:57:26 2287

原创 并查集 小结

并查集在许多题目里其实只是用来辅助的一个小数据结构,用来实现简单的查找和合并。本文只挑选了以并查集为中心、以并查集的灵活运用为根本的题目——经典的&&特殊的技巧[BZOJ4195][Noi2015]程序自动分析 Noi中竟然出了基础的并查集题目!这道题确实只是并查集的简单操作,只不过需要离散化+排序而已。 [NOIP2010]关押罪犯 并查集里经常会有一类问题:敌人的敌人还是朋友。 其实这道

2016-11-19 19:33:27 802

原创 树形dp 小结

只能勉强称之为树形dp的傻逼问题:[POJ1655]Balancing Act 树的重心,经典问题,但是非常简单啊。。。 用size维护一下就好辣! [BZOJ2435][Noi2011]道路修建 Noi的题竟然有这么水。。。树的?序遍历树的遍历问题,大多数与根有关。也就是说,以?为根经常在dp的状态中出现。 [NOIP2003]加分二叉树树的直径(最长链)相关(经典问题):做法一:两遍d

2016-11-17 22:32:40 1630 2

原创 [洛谷3403]跳楼机(spfa+数学相关)

题目描述传送门题解设f(i)f(i)表示只用y和z并且%x=i的所能到达的楼层的最小高度。那么答案为∑i=0x−1⌊h−f(i)x⌋+1\sum\limits_{i=0}^{x-1}{\lfloor{h-f(i)\over x}\rfloor}+1. 显然f((i+y)%x)=f(i)+y,f((i+z)%x)=f(i)+zf((i+y)\%x)=f(i)+y,f((i+z)\%x)=f(i)+z

2016-11-17 16:38:46 946

原创 [BZOJ2393]Cirno的完美算数教室(容斥原理)

题目描述传送门题解此题的数据范围应为10910^9. 首先找出[1,r]中所有的baka数,可以计算出只有21+22+..+29=10232^1+2^2+..+2^9=1023个。 其次可以发现当存在两个baka数abab满足a|ba|b的话,那么b是没有价值的,根本不用判断。 所以就把baka数中有因数也是baka数的剔除掉,可以发现只剩下了499个数。 然后可以进行dfs,x,y,lcm

2016-11-17 11:26:59 800

原创 [BZOJbegin][NOIP十连测第九场]小P的生成树(数学相关+kruskal)

题目描述 题解因为我们最终是要求 sum(a)2+sum(b)2√\sqrt {sum(a)^2+sum(b)^2}尽可能的大,所以我们肯定不能单独考虑其中一个权值的影响。那么如何将两个影响考虑到一起呢?我们把(ai,bi)(a_i,b_i)看成是有方向的向量,那么最终选取的边的和应该也是一个有方向的向量,假设我们找出该向量的极角,然后求出每个边对于该方向的投影,投影

2016-11-17 08:13:04 670

原创 [BZOJbegin][NOIP十连测第九场]小P的单调数列(数学相关+dp+bit)

题目描述题解一个非常有用的性质是这个数列只可能是一个单增的数列或者是一个单增的数列接上一个单减的数列。 怎么证明呢?其实很简单。假设三个增减增的数列和分别为abc,那么它最终的和为(a+b+c)/3。可如果我们只选择较大的两个ab的话,答案为(a+b)/2。显然是比上一个小的。 f(i)表示以i为结尾最大单增子序列和,g(i)表示以i为开头最大单减子序列和。那么ans=max{f(i),(f

2016-11-17 07:55:59 964

原创 [BZOJbegin][NOIP十连测第九场]小P的2048(模拟)

题目描述 题解根据题目直接模拟即可。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 20int a[N][N],last[N][N],b[N][N];int n,m,x1,y1,v1,x2,y2,v2,opt,K,v,now,ans;void copy(){

2016-11-17 07:49:44 911

原创 [BZOJbegin][NOIP十连测第七场]约瑟夫游戏(递推|数学相关|递归)

题目描述题解先贴上一波题解: 30%:直接模拟,每次暴力删除即可。时间复杂度O(n2)O(n^2)。 50%:递推计算。设F[n]表示n个人时最后剩下的人的编号。每 增 加 m-1 个 人 , 答 案 向 后 移 动 m 位 。 于 是 递 推 式 为 F[n]=F[n-m+1]%(n-m+1)+m,初始F[1]=1。时间复杂度O(nm)O({n\over m})。 100%:容(da)易

2016-11-17 07:43:51 843

原创 [BZOJbegin][NOIP十连测第五场]Travel(数学相关+乱搞)

题目描述 题解无解的情况很好判断:当l=0,s!=1 或 l=n-1,s!=n是没有合法路径的。 可以把所有的点看成若干条线段,然后求线段的覆盖次数。 当起点为1,终点为n,需要向左跳L次,那么至少有L条线段是需要被覆盖3次的,其余都被覆盖一次。贪心地求前L小的线段使之被覆盖3次就能得到最优解。 推广到起点和终点不为1的情况。假设起点为s,终点为e,并且s<<e,那么[s,e]这一段是和上面

2016-11-17 07:24:22 853

原创 [BZOJbegin][NOIP十连测第五场]Walk(数学相关+树形dp)

题目描述题解设ans[i]表示长度为i的链gcd最大是多少,由于长度减小时gcd的最大值是不降的,显然ans[i]=max(ans[i],ans[i+1]); 那么考虑怎么求出ans[i]。 从小到大枚举gcd,将所有权值是gcd倍数的边都加到树,然后树形dp求最长链。 这样的话,每一个数的因数都是n√\sqrt n级别的,所以每一条边都只会被加根n次,时间复杂度O(n√)O(\sqrt n)

2016-11-17 07:18:33 962

原创 [BZOJbegin][NOIP十连测第五场]Simpe(递推+数学相关)

题目描述题解一眼exgcd,然而没有搞出来。。 不过可以用跳楼机那道题的方法做。f[i]表示只用m能够到达的%n=i的最小高度,那么f[(i+m)%n]=f[i]+m; 由于每次更新的数值都是单增的,找到第一个之前已经被更新过的点就可以退出了,时间复杂度O(n)O(n); 最终的答案即为∑i=1n(q−fi)n+1\sum\limits_{i=1}^n {(q-f_i)\over n}+1,注

2016-11-16 22:00:33 883

原创 [CODEVS3324]新斯诺克(归并排序求逆序对)

题目描述传送门题解将每个数减去k之后求前缀和。求前缀和数组的逆序对即可。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long long#define N 100005int n,k;LL rev;int a[N],s[N],b[N];void mergesort(i

2016-11-16 20:14:54 446

原创 [BZOJbegin][NOIP十连测第三场]平均数(二分+归并排序求逆序对)

题目描述题解首先二分一个答案k,将序列中的数都减去k,然后求前缀和。 可以发现平均数小于k的子序列只可能是Si>Sj且i<jS_i>S_j且i<j的。也就是序列中的逆序对数。 因为是实数二分+判定,用归并排序求逆序对即可。 注意判断精度。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#d

2016-11-16 19:42:28 591

原创 [BZOJbegin][NOIP十连测第一场]Walk(bfs+乱搞)

题目描述 题解40’:按照题目所说建图,bfs求解。 70’: 考虑新增2152^15个点,这些点中i向它所有的子集连一条权值为0的有向边。对于原来的n个点,先把m条边连好,然后对于i号点,由它向新增的第valival_i个点连一条权值为1的有向边,再由新增的第valival_i个点向它连一条权值为0的有向边。 但是这个图里有0权也有1权,所以这里有一个小技巧:建两个图,一个都连0的边,一个

2016-11-16 19:25:42 814 3

原创 [BZOJbegin][NOIP十连测第一场]Tourist Attractions(图的度+bitset)

题目描述 题解时间复杂度算错了+爆int了,然后就只有可悲的40分。 40’:直接暴力枚举4个点。O(n4)O(n^4) 70’: ①暴力枚举三个点,然后判断第三个点是否和第一个点连有一条边(用邻接矩阵就可以),然后加上第三个点的度数-1或-2; ②对于一条路径a-b-c-d,枚举边b-c,然后答案答案即为(du[a]-1)*(du[b]-1)-经过b和c的三元环个数,经过b

2016-11-16 19:09:17 745

原创 [BZOJbegin][NOIP十连测热身赛]星球联盟(并查集)

题目描述传送门题解首先搞出来一颗生成树。如果存在多个连通块,把它们都连到1上去。 对于每一条非树边,连上它形成一个环,那么这个环上的所有点一定是在同一个联盟里的。 于是我们可以用并查集将树链上的点缩起来,在做并查集的过程中维护点的大小。由于每个点都只会被合并一次,时间复杂度是O(n)O(n)的。代码#include<iostream>#include<cstring>#include<cst

2016-11-16 18:49:33 771

原创 [BZOJbegin][NOIP十连测热身赛b]escape(二分+bfs)

题目描述传送门题解预处理每一个点到离它最近的敌人的距离。 二分答案,判定的时候也用bfs,只有不在距离范围内的点才能走。代码#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;#define N 1005int sx[4]={0,0,1,-1}; int sy[4]={

2016-11-16 17:27:18 524

原创 [BZOJ3445][Usaco2014 Feb] Roadblock(spfa)

题目描述传送门题解首先,翻倍的边一定是最短路必经的边,也就是说,一定在某一条最短路上。 那么随便求出来一条最短路,然后枚举最短路上的边,将边翻倍之后再跑spfa即可。 时间复杂度O(nm)O(nm)。 刚开始的时候没有注意O(nm)O(nm)的复杂度也是可以过的,所以一直在往O(m)O(m)的方向考虑,写的非常麻烦。以后一定要关注复杂度,不一定非得考虑最优的。代码#include<iostre

2016-11-16 15:00:07 1058

原创 [BZOJ4580][Usaco2016 Open]248(dp)

题目描述传送门题解设f(i,j)表示ij这一段区间合并成一个的最大值。不能合并成一个的都为-inf. 然后就可以dp了。。。 答案为max{f(i,j)},1<=i,j<=n. 可以发现这样做虽然有一些区间不合法,但是每一个可能的情况都会枚举到。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std

2016-11-16 14:44:59 776 2

原创 [BZOJ4579][Usaco2016 Open]Closing the Farm(并查集)

题目描述传送门题解和什么星球大战starwar那道题很像。。直接倒序上ufs就可以了。 动态维护联通块个数。 每条边只会被左右端点枚举两边,时间复杂度O(2∗m∗α(n))O(2*m*\alpha(n))代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 200005int

2016-11-16 14:41:44 632

原创 [BZOJ4581][Usaco2016 Open]Field Reduction(dfs)

题目描述传送门题解之前做过一个叫做覆盖问题的大暴搜,这道题和那个有点相似吧。。但是明显要简单很多啊。。 可以发现一坨散列的点一定有上下左右边界,每次要删的话只有把某一个边界上的点全删了才是有意义的。那么每一次暴力枚举当前删哪个边界上的点,又因为只需要删掉3个点,dfs的话层数最多是3,所以时间复杂度≈O(10∗43∗n)≈0.32s\approx O(10*4^3*n)\approx 0.32s,

2016-11-16 14:36:23 773

原创 [BZOJ4582][Usaco2016 Open]Diamond Collector(二分+st表)

题目描述传送门题解先排序是显然的吧= = 求出每一个点它向右能连续放到一个架子上的最右的一端和最长长度,因为是满足单调性的,其实扫一遍就可以,然而我当时dt写了个二分。。 然后对于一个点,再求它最右端的右边一直到n的最长长度的最大值。又写了个st表。。实际上从右向左扫一遍就可以。。。代码#include<algorithm>#include<iostream>#include<cstring

2016-11-16 14:30:02 579

原创 [BZOJ1232][Usaco2008Nov]安慰奶牛cheer(贪心+kruskal)

题目描述传送门题解将每一条边的边权记为原边权*2+两个点的权值,然后做最小生成树。 但是发现这样的话起点会少访问一次。 起点无论是哪个都是这n个点之中的嘛。。那么选一个最小的就好啦。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1

2016-11-15 20:49:32 626

原创 [BZOJ1419]Red is good(概率期望dp)

题目描述传送门题解这道题搞了好久啊。。各种胡思乱想各种调。 一上来想先求前i张牌出现了j张红色的牌的概率,然后再求第i张牌时红色的牌的概率,然后再根据这个概率求期望。但是后来我发现没有办法处理“最优策略”的问题,因为它有可能拿到了最优策略了之后就退出了,后面的期望完全可以不计算。 同样考虑倒着推,来避免最优策略带来的问题。f(i,j)表示还剩下i张红牌和j张黑牌的期望,然后f[i&1][j]=m

2016-11-15 17:48:22 480

原创 [COGS1489]玩纸牌(概率期望dp)

题目描述传送门题解设d(i,j)表示玩了i局赢了j局的概率,并且获胜比率不大于p*100%的时候的概率。 那么可以写出递推式:当j/i<=p时,d(i,j)=d(i-1,j)*(p-1)+d(i-1,j-1)*p. 那么Q=d(n,0)+d(n,1)+……+d(n,j=i*p)即为打了n场游戏未成功的概率。 于是可以得到天数的期望e=1+2*(1-Q)+3*(1-Q)^2+4*(1-Q)^3…

2016-11-15 15:01:34 575

原创 [CODEVS1288]埃及分数(迭代加深搜索)

题目描述传送门题解迭代加深?好厉害的名字。 我之前一直以为迭代加深是用上一次搜索的有用的信息来更新下一次搜索的值。不过看起来不是这样的。 关键是题目中要求:加数少的比加数多的好。也就是说,我们应该优先考虑加数少的,先搜加数少的。如果要是普通的搜索的话,相当于是乱搜,并不能保证是最优解。 难道这就是迭代加深搜? 可以发现如果当前的分数是aba\over b,如果想要将其分成xx个分子为1的分数

2016-11-15 11:24:32 1233

原创 [BZOJ3450]Easy(期望dp)

题目描述传送门题解简单的期望题。 f(i)f(i)表示以第i个字符结尾的期望得分,g(i)g(i)表示以第i个字符结尾连续的oo的期望长度。 分情况讨论:(设LL表示当前的连续oo的长度) ①当s(i)=xs(i)=x时,L=0L=0,所以显然f(i)=f(i−1),g(i)=0f(i)=f(i-1),g(i)=0; ②当s(i)=os(i)=o时,L=L+1L=L+1,得分从L2L^2变为

2016-11-15 11:11:09 697

原创 [BZOJ1076][SCOI2008]奖励关(状压dp+期望)

题目描述传送门题解概率和期望什么都不会吖。。。感觉这题不是很难但是我还是看了题解才做出来。。。 这一步的期望=(上一步的期望+这一步的权值)*这一步的概率。 然后用一维状压来表示一下已选过的状态来判断是否可以满足。用f(i,s)f(i,s)来表示第i步状态为s的期望。由于正推没有办法确定状态的最优解,所以倒推比较合适。代码#include<iostream>#include<cstring>

2016-11-15 10:56:56 540

原创 Miller_Rabbin大素数判定 学习笔记

引理:(费马小定理) ap−1≡1(modp),(a,p)=1a^{p-1}\equiv 1\pmod p,(a,p)=1快速判定一个数是否为素数的方法: 如果存在一个整数aa,满足ap−1≡1(modp)a^{p-1}\equiv 1\pmod p的话,那么nn称为基于aa的伪素数。 当有多个满足关系的aa时,nn为素数的概率趋向于1。 所以多取几个aa测试即可。

2016-11-13 21:49:14 548

原创 关于“求[1,n]中与n互质的数的和”的讨论

引理: 若 gcd(n,i)=1 则 gcd(n,n-i)=1 (1<=i<=n)证明:用反证法 如果存在k!=1使gcd(n,n-i)=k,那么(n-i)%k=0,n%k=0 那么必须保证i%k=0 k是n的因子,如果i%k=0,那么 gcd(n,i)=k,与原命题矛盾。那么,由于i,n-i总是成对出现,并且和是n,那么ans=n∗φ(n)/2ans=n*\varphi (n)/2于是可能

2016-11-13 21:37:42 1406

原创 [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)

题目描述传送门题解显然若f(n)≡0(modp)f(n)\equiv 0\pmod p,则f(n+p)≡0(modp)f(n+p)\equiv0\pmod p。 所以我们可以选上几个质数,然后check出0-p-1之内的答案,然后由这些答案推出1-m内的答案。选上5个质数就差不多了。(抄的hzwer的质数 不过这样的话跑得奇慢无比。算算时间复杂度应该是有一坨常数。 但是TA学长有一个我觉得更厉

2016-11-13 19:28:19 1015 1

原创 [NOIP2009][vijos1809]三国游戏(贪心)

题目描述传送门题解计算机的策略那么蠢用脑子想想也知道有必胜策略。 计算机每一次都会尽量阻止你选默契值最大的,而我们恰恰可以利用这一点。我们将武将的默契值降序排列,然后统计每一个武将第一次出现和第二次出现的位置。我们枚举第一次小涵第一次会拿哪一个武将。第一次拿的那个武将与之配对的武将一定是拿不到的,因为计算机会将它拿走,但是我们可以拿这个武将第二次出现时与它配对的武将,并且这样一定是最优的。 不要

2016-11-13 19:01:11 921

原创 一个关于数论中拉格朗日定理的证明

劲。

2016-11-13 15:39:23 6420

原创 [NOIP2009][vijos1810]导弹拦截(枚举)

题目描述传送门题解首先把所有导弹按照与第一个拦截系统的距离排序,然后枚举第一个系统最远拦截到哪个导弹,剩下的导弹就都由第二个系统拦截。更新答案即可。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005#define inf 2

2016-11-12 21:46:16 416

原创 扩展欧几里得算法(exgcd) 学习笔记

定义首先引入一个叫做贝祖定理的东西 对于∀a,b∈N,总是∃x,y∈Z,使ax+by=(a,b)\forall a,b\in N,总是\exists x,y\in Z,使ax+by=(a,b)已知a,ba,b,求ax+by=(a,b)ax+by=(a,b)一组可行解的算法即为扩展欧几里得算法。算法流程首先我们知道用来求最大公因数的欧几里得算法。int gcd(int a,int b){

2016-11-12 00:12:36 2058

原创 [NOIP2009][vijos1814]细胞分裂(数学相关)

题目描述传送门题解题意实际上是要求最小的n,使sn≡0(modm1m2)s^n\equiv 0\pmod{{m_1}^{m_2}} 呃,,其实没有这么麻烦。将s和m1m_1质因数分解,假设 s=pa11pa22...pakk,m1=qb11qb22...qbkks=p_1^{a_1}p_2^{a_2}...p_k^{a_k},m_1=q_1^{b_1}q_2^{b_2}...q_k^{b_k}

2016-11-11 23:37:12 965

原创 [NOIP2013][vijos1842]火柴排队(数学相关+离散化+bit)

题目描述传送门题解首先把给出的式子化一化。 ∑i=1n(ai−bi)2=∑i=1n(a2i+b2i−2aibi)=∑i=1nai+∑i=1nbi−2∑i=1naibi\sum\limits_{i=1}^n (a_i-b_i)^2=\sum\limits_{i=1}^n (a_i^2+b_i^2-2a_ib_i)=\sum\limits_{i=1}^na_i+\sum\limits_{i=1}^nb

2016-11-11 23:22:29 756

原创 [BZOJ3401][Usaco2009 Mar]Look Up 仰望(单调栈)

题目描述传送门题解单调栈裸题。 维护单调递减的栈,每一个点的右边只会被第一个 比它大的点更新。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005int n,top;int stack[N],h[N],r[N];void push(int x){ whi

2016-11-11 23:08:16 613

原创 [BZOJ2016][Usaco2010]Chocolate Eating(二分)

题目描述传送门题解二分水题。字典序尽量大只是贪心地判定就行了。 但是也有一个坑点,就是最后没有吃的巧克力都要在最后一天吃完。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define LL long long#define N 50005const LL inf=1e18;int n,

2016-11-11 23:06:03 685

空空如也

空空如也

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

TA关注的人

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