自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一些好玩的数论

一个有趣的公式∑i=1ni3=(∑i=1ni)2\sum_{i=1}^n i^3=(\sum_{i=1}^n i)^2这个公式很好证明, 又很好用。证明: (n+1)4−n4=4n3+6n2+4n+1(n+1)^4-n^4=4n^3+6n^2+4n+1 n3=14[(n+1)4−n4]−32n2−n−14n^3=\frac{1}{4}[(n+1)^4-n^4]- \frac{3}{2}n^2-n

2016-08-29 16:43:36 1963 2

原创 网络流例题及构图选讲

最大流最小割问题本文就不对最大流最小割问题定义了,当然也就不证明最大流==最小割了。 本文介绍一种求最大流的方法。SAP 算法(最短增广路算 法)。最短增广路算法(Shortest Augmenting Path Algorithm),即每次寻找包含弧的个数最少的增广路进行增广,可以证明,此算法最多只需要进行|v|∗|s|/2|v|*|s|/2次增广。并且引入距离标号的概念,可以在的时间O(|v

2015-09-09 22:04:21 1209

原创 bzoj4785 UOJ #291 ZJOI2017 Day1 树状数组

解题思路可以打表发现 错误的树状数组ii对jj产生贡献当且仅当i≥ji\geq j. 正确的树状数组ii对jj产生贡献当且仅当i≤ji\leq j. 那么可以发现假如我的一个询问l,rl,r,产生贡献的位置只可能是l−1l-1或rr.那现在的操作就很简单了,对于一个修改,他的产生贡献的区间可以按照他的端点来分类讨论,然后就直接上树套树就好了。参考程序#include<cstdio>#incl

2017-03-24 11:36:22 992

原创 GDKOI总结

Day1: 先看了第一题,其实第一题的话就是一个简单的宽搜,接着我就跳到了下一题。 第二题,看完题之后觉得题目就是在问最长的可能的括号序。然后我就想到,如果要加0的话一定加在最前面。 如果要加1的话一定加在最后面。 接着其实check合不合法就是求前缀和中有没有小于0的。 看到n只有200000,我就直接写了一个nlog的做法,就是在前缀和相同的里面二分,然后rmq求有没有<0的。 然后

2017-02-21 15:34:43 586

原创 codeforces 755E PolandBall and White-Red graph

题目大意给你点数nn,以及限制kk. 你要构造一个连通图GG以及连通补图G′G'。 使得min(G的直径,G′的直径)=kmin(G的直径,G'的直径)=k.解题思路k=1k=1k=1k=1时显然无解。k≥4k\geq4k>=4k>=4时也无解。证明我们用dd表示GG中的距离。 我们用d′d'表示G′G'中的距离。假设d(u,v)≥4d(u,v)\geq4,证明∀x,y\forall x,y满

2017-01-16 11:47:54 1086

原创 codechef Annual Parade

题目大意一张nn个点mm条边的带边权有向图。有KK组询问,每组询问给出一个整数CC.对于每组询问.你需要从图中选出若干条路径,相同的边可以经过多次.一个方案的代价是所有经过的道路(多次经过重复统计)的边权和加上起点不等于终点的路径条数乘CC再加上没有经过的城市数目乘CC.对每组询问你需要计算最少代价。2≤n≤250,1≤m≤3×104,1≤k≤1042\leq n \leq 250,1\leq m

2016-11-29 16:48:46 851

转载 codeforces 730K

题目大意给你一个无向图和其中两个点ss, tt. 要求你将这个无向图定向成一个从ss到tt的格(定义: ss是唯一的入度为0的点, tt是唯一的出度为0的点, 且整个图无环).解题思路首先我们有一个无视时限的做法. 先把ss到tt连起来, 这条链从ss到tt定向. 然后每次找从链上出去再回来的一条路径, 按照出去和回来的点在链上的先后给他们定向. 但是为了不超时, 需要实现这个做法. 方

2016-11-03 21:48:35 583

原创 codeforces 733E

题目大意有nn级台阶,每一级台阶有一个符号U或D。 假如你在第ii级台阶,符号是U,那么你下一步会在i+1i+1,反之则在i−1i-1. 假如你在某个时刻离开了第ii级台阶,那一位的标识符就会翻转,U变成D,D变成U。问你从每一级台阶开始走,直到离开楼梯(可以下端或上端),需要多少时间?解题思路首先假如有cntucnt_u个U,cntdcnt_d个D,那么你从最上端的cntucnt_u级台阶开始

2016-11-01 20:26:12 1291

原创 codeforces 722E

题目大意在一个n∗mn*m的网格图中,你要从(1,1)(1,1)走到(n,m)(n,m),每次只能向右或者向下。 其中有kk个障碍点,一条路径每经过1个障碍分数就会从ss,变成⌊s2⌋\lfloor \frac{s}{2} \rfloor. 你最开始的分数为ss,问期望的分数,对1000000007取模。解题思路可知分数只有logslogs种。 那么我们只需求出每种>1的分数共有多少种走法即可

2016-10-09 22:31:18 842

转载 codeforces 721E

题目大意在一条数轴上,你要从0走到LL。 其中有nn个不相交可行区域。 你要选最多的长度为pp的段,使得每一段都在可行区域内。 并且假如你现在取的段是[x,x+p][x,x+p],那么你下次取的段的起始点startstart要满足。 start=x+pstart=x+p或start≥x+p+tstart\geq x+p+t. 问最多取多少段?解题思路设fif_i为走完第ii个区间的最优值。

2016-10-09 22:14:09 931

原创 codeforces 718C

题目大意最开始给你一个大小为nn的数组aia_i,mm组询问。 第一种,给数组ll到rr的元素加上xx. 第二种,求∑ri=lfibai\sum_{i=l}^r fib_{a_i}fibxfib_x表示斐波那契数列第xx项。解题思路易得 [fibx0fibx−10]∗[1110]n=[fibx+n0fibx+n−10]{\begin{bmatrix} fib_x & fib_{x-1}\\

2016-09-24 12:26:19 861

转载 转载的KM算法

转载自别人的博客M算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。 设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]。 在算法执行过程中的任一时刻,对于任一条边(i,j), A[i]+B[j]>=w[i,j]始终成立。KM算法的正确性基于以下定理:   若由二分图中所有满足A[i]+B[j]=w[i,j]的边(

2016-09-20 21:44:14 517

原创 codeforces 712E

题目大意有nn个赌场,你在ii赌场时,有pip_i的概率走到i+1i+1,有1−pi1-p_i的概率走到i−1i-1.保证任何时候pi≤pi+1p_i\leq p_{i+1}有qq次操作,修改一个赌场的pp值;或者询问[l,r][l,r]表示从第ll个赌场走到jj的概率,他在走的过程中不会离开区间[l,r][l,r].解题思路设fif_i表示从ii能走到nn的概率。 易得fi=fi−1∗(1−pi

2016-09-12 22:48:44 875

原创 codeforces 712D

题目大意两个人玩游戏,第一个人最开始分数是aa,第二个人最开始分数是bb,总共玩tt轮,每一轮两人会随机的在区间[−k,k][-k,k]共2k+12k+1个数中随机拿一个,并加到自己的分数中。 问第一个人最后赢的概率是多少。 将概率乘(2k+1)t(2k+1)^t以保证输出的是一个整数,并将整数mod109+7mod 10^9+7.解题思路设fi,jf_{i,j}表示已经玩了ii轮,第一个人比第

2016-09-11 09:35:32 942

原创 八月总结

其实这几次的模拟赛都做得还不错,但是还是出现了一些问题。不够严谨24号的T2,其实挺简单的,就只是Tarjan缩环,求叶子数。但是没有特判所有点在一个双强联通分量的情况。24号的T3,dist没有memset。21号的T1,其实就是离散化+线段树,但是离散化的时候没有直接排序,而是用了map,就有两个点T了。21号的T2,做法已经想到了,没有判断上界,就错了。20号的T1,没有看见空间限制是32M,

2016-08-24 22:34:27 518

原创 线性同余方程及例题 codeforces 710D

简述⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪x≡r1(modm1)x≡r2(modm2)x≡r3(modm3)……\left\{\begin{aligned}x ≡ r_1 \pmod{m_1} \\x ≡ r_2 \pmod{m_2} \\x ≡ r_3 \pmod{m_3} \\……\\\end{aligned}\right. 求最小非负整数解xx.中国剩余定理两个方程先考虑只有两个方程怎么做。

2016-08-23 20:20:49 2314 1

原创 SPOJ SOPARADE

题目大意有nn个人,每个人需要有一个[1,4][1,4]的标识符。 其中相邻两个人的标识符绝对值一定要大于等于2。 还有mm个条件,每个条件给出的人的标识符必须不同。 问是否存在。n,m≤100000n,m\leq100000解题思路首先可以发现奇数位只可能是1或2,偶数位只可能是3或4。 那么把每个位置拆成两个点,这就变成了2-sat. Tarjan判断2-sat是否存在矛盾即可。参考代

2016-08-16 19:41:00 682

原创 Codechef LEBOXES

原题链接CC LEBOXES题目大意一共有nn个袋子和mm个粮食。 每个粮食需要支付CiC_i的金钱和DiD_i的钻石购买。 每个袋子有PiP_i的概率装有ViV_i的金币,有1−pi1-p_i的概率装有1个钻石。 问每个袋子都打开的情况下,期望拿到多少个粮食。n,m≤30;Vi,Ci≤107n,m\leq 30;V_i,C_i\leq10^7解题思路meet in the middle将盒子

2016-08-16 19:27:27 1076

原创 如何在O(n)的时间复杂度下构造哈夫曼树

描述众所周知,合并果子是堆的入门题,而 合并果子就是构造哈夫曼树。现在问题就是,在给定有序的数组aa下,如何O(n)O(n)构造哈夫曼树。算法使用两个队列,从小到大将数组aa的元素加入队列firfir,队列secsec为空。每次我们将两个元素合并,可以证明一定是三种之一。队列firfir中的队首和第二位合并队列secsec中的队首和第二位合并队列firfir中的队首和secsec中的队首合并

2016-08-10 22:32:53 8709 2

原创 codeforces 616F

原题原题链接题目大意给你n≤105n\leq10^5个字符串,字符串总长度≤5∗105\leq 5*10^5,每个字符串有一个价值cic_i,让你构造一个字符串,使得∑ni=1ci∗ps,i∗|s|\sum_{i=1}^n c_i*p_{s,i}*|s|最大,ss为构造的字符串,|s||s|为构造的字符串的长度,ps,ip_{s,i}为构造的字符串在第ii个字符串中的出现次数。输出这个最大值。解题思

2016-04-16 15:48:06 848

原创 codeforces 613D

原题原题链接题目大意给你一颗n≤100000n\leq100000个点的树,然后有q≤100000q\leq100000个询问,每个询问选定kk个点,问,至少在树中删除多少个点,使得nn个点两两不连通,无解输出−1-1。 保证∑k≤100000\sum k\leq 100000解题思路首先可以确定的是,无解一定是两个点相邻。其他的情况就要树形dp。 如果当前点为非选定点,且子树中有大于2个选定点

2016-04-16 15:24:41 1107

原创 codeforces 618F

原题原题链接题目大意给定两个多重集AA 和BB。 Size(A)=Size(B)=n≤106Size(A)=Size(B)=n \leq 10^6,且集合里的元素ai,bi≤na_i,b_i\leq n求AA和BB的子集,使得这两个子集的元素和相等.解题思路令∑ai≤∑bi\sum a_i\leq\sum b_i. 我们把数列转化为数列,计fi=∑ij=1aj,gi=∑ij=1bif_i=\su

2016-04-16 15:02:55 1074

原创 codeforces 623D

原题原题链接题目大意给定n≤100n\leq100个人,每轮随机选取一个人,每个人被选的概率为pi(精度为0.01),∑pi=1p_i(精度为0.01),\sum p_i=1,游戏结束当且仅当每个人被抓住一次或以上,问,在最优策略下,期望结束轮数是多少,要求答案精度为10−610^{-6}。解题思路设fi,jf_{i,j}表示第ii轮结束之后,第jj个人被抓过的概率。设gig_i表示第ii轮结束之后

2016-04-15 14:41:16 806

原创 codeforces 653F

原题原题链接题目大意给你一个长度为n≤5∗105n\leq 5*10^5的只含有左右括号字符串,问,有多少个不同的合法的字串满足正确的括号序。满足条件的括号序: 1) A=”()” 2) (A) 3) AA解题思路我们可以把((当成+1,把))当成-1,那么可以做一个前缀和sis_i,如果要求以ii位置开头的合法的括号序的个数就是求有多少个i<j≤ni<j\leq n满足sj=si−1,∀i≤

2016-04-15 11:31:46 724

原创 codeforces 632F

题目大意给定一个矩阵AA,大小是n∗n,n≤2500n*n,n\leq2500,判断这个矩阵是否是MagicMagic的。 一个矩阵是MagicMagic的,必须满足。 1.ai,i=01.a_{i,i}=0 2.ai,j=aj,i2.a_{i,j}=a_{j,i} 3.3.对于∀i,j,k\forall i,j,k满足ai,j≤max(ai,k,aj,k)a_{i,j}\leq max(a

2016-04-12 22:28:22 1076 2

原创 codefoces 632E

题目大意给你nn种物品,每种物品有一个价值aia_i,每一种物品可以取任意次,问恰好取kk次物品能取到的所有可能价值,从小到大输出价值。 n,ai,k≤1000n,a_i,k\leq1000解题思路可以容易写出一个dp,fi,j,kf_{i,j,k}表示已经做到第ii种物品,取了jj次,是否存在和为kk的方案,这个方法的时间复杂度是O(n4)O(n^4).我们可以消掉一维,首先,我让每个数都减去最

2016-04-11 22:20:45 808 1

原创 codeforces 251D

题目描述给你n≤105n\leq10^5个数,让你分成两个集合,设第一个集合的数的异或值为x1x1,第二个集合的数的异或值为x2x2,空集的异或和定义为00,让你求一个使得x1+x2x1+x2的值最大,并且满足最大条件下x1x1的值最小的方案。解题思路首先你会发现,如果二进制中第ii位一共有奇数个11,那么这一位一定会给答案增加2i2^i的贡献,因为奇数个11分成两堆,一定有一堆为奇数个,一堆为偶数

2016-04-08 22:25:35 1173

原创 codeforces 593E

题目大意给你一个n∗m≤20n*m\leq20的地图,然后有三种询问或限制q≤10000q\leq10000。 第一种,在(xi,yi)(x_i,y_i)位置上从tit_i时刻有障碍。 第二种,在(xi,yi)(x_i,y_i)位置上从tit_i时刻取消障碍。 第三种,询问tit_i从(1,1)(1,1)到(xi,yi)(x_i,y_i)的方案数.保证ti>ti−1t_i>t_{i-1}解题思

2016-04-08 22:05:01 1009

原创 codeforces 573E

题目描述给你nn个数,让你取出其中的某些数,使得剩下的数组成一个序列(不能调换顺序),序列的∑ki=1i∗si\sum_{i=1}^{k} i*s_i最大。解题思路多次贪心取最优值。假设当前选的序列的前缀和为sumisum_i。 1.如果一个数aja_j在上一个序列没有选,但是aj∗numj+sn−sj≥0a_j*num_j+s_n-s_j\geq 0,numjnum_j表示aja_j排在序列的第

2016-04-06 10:14:16 2335

原创 GDOI2013 整数分拆

题目描述题目要求求一个正整数nn的分拆成kk个数的方案。其中要求满足。 1、a1+a2+...+ak=n1、a_1+a_2+...+a_k=n 2、a1∗b1≤a22、a_1*b_1\leq a_2 3、a2∗b2≤a33、a_2*b_2\leq a_3 … k、ak−1∗bk−1≤akk、a_{k-1}*b_{k-1}\leq a_k 其中bb会读入。 n≤105n\leq 10 ^

2016-04-04 16:32:35 1091

原创 codeforces 626G

题目大意给你nn个奖池,tt张彩票,qq次修改。 每个奖池的奖金为pip_i,原来每个奖池有lil_i张彩票。 每次修改,可以把一个奖池的彩票数+1或-1。 每次修改后问投奖所能获得的奖金的最大期望,每个奖池投奖的彩票数不能超过总彩票数的一半。思路在同一个奖池中,后一张彩票的的贡献一定比前一张的贡献要小,我们可以用线段树维护,一个区间贡献最大的点的位置,以及减小一张彩票所减小的贡献最小的点。那

2016-03-30 21:20:30 1022

原创 bzoj2154 Crash的数字表格

题目大意给你nn和mm,求∑ni=1∑mj=1lcm(i,j)\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i,j).范围 1≤n,m≤1071 \leq n,m \leq 10^7.做法易得ans=∑ni=1∑mj=1lcm(i,j)=∑ni=1∑mj=1i∗jgcd(i,j)ans=\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i,j) =\sum

2016-03-30 11:18:30 679

转载 计算N内点对互质个数

这个是我在PhilipsWeng的博客上看到的,很神奇,就摘录下了。f(N)=∑1≤x,y≤N,gcd(x,y)=1 1f(N) = \sum_{1\leq x,y \leq N,gcd(x,y)=1}~1记g(N)=∑1≤x,y≤N 1=N2g(N) = \sum_{1\leq x,y \leq N}~1 = N^{2} fk(N)=∑1≤x,y≤N,gcd(x,y)=k 1f_{k}(N) =

2016-03-29 16:48:26 928

转载 codeforces 650E

原题原题题目大意给你两棵树,你要让原树变为新树,每次可以删一条边加一条边,但是在任意时刻,不能出现环,问最小步数以及删边加边的方案。解题思路首先考虑那些在初态和终态下都出现的边。这些边显然都是不动的,把它们连接的两个点合并起来。合并时要维护这个集合内的点与集合外的点的连边。答案很显然为总边数减去不动的边数,即每次删一条原树中的边,并增加一条终态的树上的边。按照任意顺序删去原树中要改变的边(u,v)(

2016-03-29 11:34:45 746

原创 codeforces 652F

原题原题链接题目大意给你nn只蚂蚁的初始位置以及它们的最初的方向。蚂蚁会在一个大小为mm的环上行走,走tt时刻。若两只蚂蚁相撞时,他们会把自己的行走方向转换。问最后每只蚂蚁的位置。解题思路如果我们设每只蚂蚁都是相同的,那么两只蚂蚁相撞可以理解为两只蚂蚁各在自己的路上继续走。我们就可以知道最后蚂蚁们在哪里。由于蚂蚁是有序的,所以我们不能知道哪只蚂蚁对应哪个位置。还有就是,蚂蚁之间的相对顺序是固定的,因

2016-03-28 10:26:33 1158

原创 codeforces 652E

题目大意给你一个nn个点,mm条边的连通图,某些边上会有宝藏,只有一个询问,问从aa到bb是否存在一条路径使得,路径上没有重边并且路径上有宝藏。范围(1 ≤ n ≤ 3∗105,0 ≤ m ≤ 3∗105)(1 ≤ n ≤ 3*10^5, 0 ≤ m ≤ 3*10^5) 思路易得,如果一个环上有宝藏,那么我一定可以从环上的一个点进去,拿到宝藏,然后从任意一个点出来。那么我就可以缩环,建树,现在的树就

2016-03-26 09:20:40 1074

原创 codeforces 628F

原题原题链接题目大意给你一个集合的大小NN,NN是55的倍数。 然后有一些限制: 集合里的数范围是[1,b][1,b]. 集合中的数mod5=0,1,2,3,4mod 5=0,1,2,3,4的数的个数各为N/5N/5。 还有qq个附加限制,就是元素值为[1,upToi][1,upTo_i]的个数为quantityiquantity_i。 问是否存在一个集合满足条件。范围(5 ≤ n ≤ b

2016-03-19 12:07:40 1012

原创 最大权闭合图及最大密度子图

最大权闭合图例题:GDKOI2016D1T3寻宝描述:求一个点集,使得点集中的任意后继也在点集中,求点集的∑wi/∑vi\sum w_i / \sum v_i最大。 这道题就是一个最大权闭合图。首先二分答案,对于当前的答案pp,我们这样连边。对于一对依赖关系(u,v)(u,v),表示vv是uu的后继,那么我们就连(u,v,∞)(u,v,∞),设当前点权为fif_i,若fi>0f_i>0,连接(s,

2016-03-08 17:18:21 1023

转载 5分钟搞懂后缀数组

转载先注明出处:原贴地址 转载先注明出处:原贴地址

2016-03-07 22:37:24 1080

原创 模拟赛总结

第一天的模拟赛第一题看着不会做只能拿部分分,就去看第二题了,看完第二题之后发现这道题以前见过,然后最后就对了。第三题,看完题之后觉得每种颜色的积木数量很多觉得不可做,而且30%的部分分要枚举每一层是什么、以及判断相邻两层是否可以满足联通条件,最后dp求一下方案数……比赛的时候我觉得挺复杂的,但是有10分是n=2的,这个我就直接手玩了。第四题,我想到他一定是先将原字符串转成需要的字符串,剩余的操作就查

2016-02-18 22:51:23 463

空空如也

空空如也

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

TA关注的人

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