自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ModestCoder_的博客

一个modest的coder

  • 博客(454)

原创 友链

排名不分先后丫orz潜力股zyporz数据结构大师zycorz神仙fxkorz神仙学长wrtorz杭二仙女hsyorz衢二神仙xzyorz义乌神仙bztorz义乌神仙zjq

2019-08-21 07:30:52 513

原创 模板整理

因为自己还得再写一遍,大部分模板得先鸽鸽鸽注:算法名称上搞了对应模板的传送门数论1、逆元2、线性筛3、miller_rabin素数判定4、exgcd#include <bits/stdc++.h>using namespace std;int x, y;void exgcd(int a, int b){ if (!b){ x = 1, y = 0; retu...

2019-07-21 16:50:23 152

原创 【题解】LuoGu6287:Mag

原题传送门结论:答案一定是某个点,或者一段1,或者一段1中间有个2某个点的情况不论,如果能有答案比单个点更优,一定满足上面的结论证明:1.11111(x个)311111(y个)1.11111(x个)311111(y个)1.11111(x个)311111(y个),总的值是3x+y+1\frac{3}{x+y+1}x+y+13​,令x<=yx<=yx<=y,则还有一种情况是1y\frac{1}{y}y1​3x+y+1<1y,3y<x+y+1,2y<x+1\frac{

2020-10-28 11:29:24 4

原创 【题解】LuoGu6398:KOLEKCIJA

原题传送门先升序排序令dpidp_idpi​表示包含这一个的答案dpi=min(dpj+max(k,ai−aj+1+1))(j<i)dp_i=min(dp_j+max(k,a_i-a_{j+1}+1))(j<i)dpi​=min(dpj​+max(k,ai​−aj+1​+1))(j<i)然后,求方案如果dpi−dpi−1=ai−ai−1dp_i-dp_{i-1}=a_i-a_{i-1}dpi​−dpi−1​=ai​−ai−1​,说明iii和i−1i-1i−1属于同一个区间所以可

2020-10-25 20:23:32 161 4

原创 【题解】LuoGu6503:DIFERENCIJA

原题传送门只要知道每个点作为最大/小值往左/右能扩展到哪里这个可以用单调栈处理O(n)O(n)O(n)解决但是我有另一种方法假如是一棵树,要求从某一点到另一点边权最大-边权最小加起来可以用类似kruskalkruskalkruskal的并查集写法详情见这道题目然后我把这道题化归成一条链的情况Code:#include <bits/stdc++.h>#define maxn 1000010#define LL long longusing namespace std;/

2020-10-25 18:15:27 15

原创 【题解】LuoGu6289:Vještica

原题传送门这题可以想出很多性质n<=16n<=16n<=16暗示的非常明显,我后来才意识到是状压对于一堆字符串,显然,我们可以先把它们共有的部分弄掉,剩下的不存在共有的部分我可以状压dpidp_idpi​表示状态iii的答案枚举iii的子集jjj,表示先把jjj和i−ji-ji−j内部先算好答案所以两部分的答案加起来的时候总共共有的部分重复算了一遍要减掉令sum=总共的共有部分sum=总共的共有部分sum=总共的共有部分dpi=min(dpj+dpi−j−sum)dp_

2020-10-25 18:08:22 20

原创 【题解】LuoGu4623:BUREK

原题传送门直线能穿过三角形,因为直线是平行于坐标轴的,所以很简单以x=px=px=p为例若直线能穿过某一个三角形,那么这条直线必定能穿过三角形的某一条边换句话说,令三角形三个点中横坐标最小是xminxminxmin,最大是xmaxxmaxxmax如果xmin<p<xmaxxmin<p<xmaxxmin<p<xmax,直线就能穿过这个三角形所以可以直接差分,dxmin+1++,dxmax−−d_{xmin+1}++,d_{xmax}--dxmin+1​++,dx

2020-10-25 17:56:02 34

原创 【题解】LuoGu6859:蝴蝶与花

原题传送门这是一个超难题的模板,但是有一个性质,ai=1/2a_i=1/2ai​=1/2,我敏锐的感觉到这道题可能是基于这个性质来做的先令l=1l=1l=1,看看是否存在rrr,使得al+...+ar=sa_l+...+a_r=sal​+...+ar​=s发现不存在这个rrr,当且仅当存在rrr,使得∑i=lrai=s−1且ar+1=2\sum_{i=l}^{r}a_i=s-1且a_{r+1}=2∑i=lr​ai​=s−1且ar+1​=2如果存在rrr满足,当然直接输出,若是不存在必定形如考虑移

2020-10-25 12:03:12 29

原创 【题解】LuoGu6858:深海少女与胖头鱼

原题传送门期望dpdpn,m=1+nn+mdpn+m−1,1+mn+mdpn,m−1dp_{n,m}=1+\frac{n}{n+m}dp_{n+m-1,1}+\frac{m}{n+m}dp_{n,m-1}dpn,m​=1+n+mn​dpn+m−1,1​+n+mm​dpn,m−1​然后发现无法实现经过部分分m=0m=0m=0启发又看见了n<=1014,m<=106n<=10^{14},m<=10^6n<=1014,m<=106猜想时间复杂度可能只与mmm有关d

2020-10-22 21:14:24 20

原创 【题解】LuoGu6286:Cezar

原题传送门一开始看错了题意,错以为是每个字符串里面加密后排序后来才发现是字符串之间排序那么对于两个字符串sai,sai+1s_{a_i},s_{a_{i+1}}sai​​,sai+1​​,加密后的sais_{a_i}sai​​的字典序要小于sai+1s_{a_{i+1}}sai+1​​可以从最高位开始比较,第一位不同的字符,比如是c1,c2c1,c2c1,c2,说明加密后的c1<c2c1<c2c1<c2,就从c1c1c1往c2c2c2连一条有向边最终做一遍拓扑构造答案如果有点的

2020-10-22 16:43:01 8

原创 【题解】LuoGu6404:bob

原题传送门一开始考虑到悬线法,但是我忘了,所以我就自己创新假设我已经扣出了一个相同颜色的连通块计算答案对于第一列,答案贡献是4∗14*14∗1第二列答案是3∗13*13∗1第三列答案是2∗22*22∗2第四列答案是2∗12*12∗1第一列答案是2∗42*42∗4第二列答案是2∗32*32∗3第三列答案是3∗23*23∗2第四列答案是4∗14*14∗1可以直接O(n2)O(n^2)O(n2)扫过来对于每一列的点,用upexjupex_jupexj​维护往上扩展最远能到哪里用单调栈

2020-10-21 20:47:41 9

原创 【题解】LuoGu4422:Deda

原题传送门这是二维偏序,注意到每个小朋友的年龄为1−n1-n1−n不同可以按照小朋友的年龄为线段树的下标,维护一段小朋友区间中最小的站台每次updateupdateupdate暴力把所有包含这个小朋友的区间更新,这个部分稳定O(nlogn)O(nlogn)O(nlogn)每次queryqueryquery先看看能不能往左找到满足的小朋友,不行看看往右走可不可以算是一个常数比较大的线段树Code:#include <bits/stdc++.h>#define maxn 200010

2020-10-21 20:32:51 12

原创 【题解】LuoGu6417:mafija

原题传送门思路源自luogu初赛模拟卷贪心从每个入度为0的点开始遍历,删边整张图就剩下一些环,再处理一下环的情况Code:#include <bits/stdc++.h>#define maxn 500010using namespace std;int n, d[maxn], nxt[maxn], vis[maxn], ans;inline int read(){ int s = 0, w = 1; char c = getchar(); for (; !isdigi

2020-10-21 20:27:57 14

原创 【题解】CF1213G:Path Queries

原题传送门这个题目就比较套路了此前做过三个比较相似的题目就是并查集的同时维护一些信息,这题只要维护结点个数按照边从小到大连对于目前一条(x,y,l)(x,y,l)(x,y,l),找到xxx的祖先s1s1s1,yyy的祖先s2s2s2,ansl+=sizes1∗sizes2ans_{l}+=size_{s1}*size_{s2}ansl​+=sizes1​∗sizes2​Code:#include <bits/stdc++.h>#define maxn 200010#define

2020-10-20 16:47:37 32

原创 【题解】CF1154D:Walking Robot

原题传送门贪心模拟分类讨论如果蓄电池没电了,那么肯定走干电池,如果走到一条1线段,蓄电池电量可以+1如果蓄电池还有电,那么如果干电池没电,或者下一条线段为0,又或者蓄电池目前满电,走蓄电池,否则才走干电池Code:#include <bits/stdc++.h>#define maxn 200010using namespace std;int n, a, b, c;inline int read(){ int s = 0, w = 1; char c = getc

2020-10-20 16:30:56 8

原创 【题解】LuoGu6857:梦中梦与不再有梦

原题传送门从某一点出发,一笔画最多几条边就是从一个完全图最少删去几条边使之能一笔画发现如果点数是奇数,那么每个点的度数都是偶数,直接一笔画如果点数是偶数,每个点的度数都是奇数,根据小学奥数,度数为奇数的点有0/2个时候,可以一笔画,又删去一条边可以减少两个度数为奇数的点,所以删去n/2−1n/2-1n/2−1条边Code:#include <bits/stdc++.h>#define LL long longusing namespace std;inline int rea

2020-10-20 16:09:39 32

原创 【题解】CF1175C:Electrification

原题传送门二分最优值,然后O(n)O(n)O(n)验证对于每个iii,就是看[i,i+k][i,i+k][i,i+k]这段区间能不能达到这个最优值就是[ai+k−ai+12]<=mid[\frac{a_{i+k}-a_i+1}{2}]<=mid[2ai+k​−ai​+1​]<=mid,可行的话,答案就是[ai+k+ai+12][\frac{a_{i+k}+a_i+1}{2}][2ai+k​+ai​+1​]Code:#include <bits/stdc++.h>#d

2020-10-19 09:16:35 39

原创 【题解】CF1157B:Long Number

原题传送门根据字典序的方便性质找到第一个可以更优的就换换到第一个会更劣的为止Code:#include <bits/stdc++.h>#define maxn 200010using namespace std;int n, a[maxn], b[maxn];inline int read(){ int s = 0, w = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') w

2020-10-19 08:54:54 12

原创 【题解】CF1143B:Nirvana

原题传送门数位dpdpi,0/1dp_{i,0/1}dpi,0/1​表示第i位,是否退位了dpi,0=dpi−1,0∗aidp_{i,0}=dp_{i-1,0}*a_idpi,0​=dpi−1,0​∗ai​dpi,1=max(9dpi−1,1,dpi−1,0∗(ai−1))dp_{i,1}=max(9dp_{i-1,1},dp_{i-1,0}*(a_i-1))dpi,1​=max(9dpi−1,1​,dpi−1,0​∗(ai​−1))可以把第一维弄掉然后初始化dp0=a1,dp1=max(1,

2020-10-18 14:15:16 16

原创 【题解】CF1131C:Birthday

原题传送门套路贪心先排序,成为一个有序数列a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​像这样子摆放,如何证明正确性呢首先可以感性得知,如果是最优解,那么任意交换两个数的位置肯定比最优解劣那么如果一种方案可以使得无法交换两个数来更优,那么这种方案是不是最优的,我觉得是的所以可以任意交换,比如交换a4,a6a4,a6a4,a6,那么这一部分的最大值从max(a8−a6,a6−a4,a4−a2)max(a8-a6,a6-a4,a4-a2)max(a8−a6,a

2020-10-18 13:56:03 10

原创 【题解】CF933A:A Twisty Movement

原题传送门就是按顺序先找一段全是1的子序列,再找一段全是2的子序列,再找一段全是1的子序列,再找一段全是2的子序列这样我们就找出了一段诸如111122221111222111122221111222111122221111222的子序列,把第二段和第三段翻转,得到111...111222...222111...111222...222111...111222...222,就是答案就是找出长度最长的四段和令sum1isum1_isum1i​表示前缀1的个数sum2isum2_isum2i​表示后缀2

2020-10-18 10:41:51 14

原创 【题解】LuoGu5023:填数游戏

原题传送门这道题有一个非常实用的考场策略在里面,就是暴力当年考场里写了最慢的暴力,找出了1~4的规律,拿到了75分const p = 1000000007;var a : array[0..1000, 0..1000] of char; flag : boolean; s, num : array[0..1000000] of ansistring; n, m, tot : longint; ans : int64; sum : ansistr

2020-10-17 21:13:01 15

原创 CSP-s2020初赛游记

这次初赛是我竞赛生涯里参赛感觉最好的一次,从昨天下午做完作业来到机房起,整个人处于一个松弛的状态,实在是不怎么紧张,回想起一年前那个战战兢兢的自己,心感到我一年来的进步是如此之大,不但在竞赛水平,更在心理状态。考试的时候很淡定,阅读第三题我做了一个多小时,因为我觉得这不但是一个很有难度,要求很高的编程题,更是一道数学趣味题,虽然我最终没有完全理解,但是这个过程我很享受。完善程序做了不到半小时,相比于去年取石子那道奇葩状压使我15分全扣光,今年的水平很稳定,直接秒杀。去年的我只考了73.5,接下来的两周

2020-10-11 17:26:29 315

原创 LuoGuCSP初赛模拟题错题本

传送门答案A原题NOIp2008初赛完形传送门一棵树也算是森林,所以选择C答案D到达的状态是O(nm)O(nm)O(nm)的代码里面虽然有记忆化,但是对于每一个状态还是需要O(m)O(m)O(m)的时间求值所以选择AAA代码中有取模操作,所以是错的第一遍dfs相当于删边,如果目标点入度为0,或者我当前点事被封禁的,那么目标点一定不能被封禁,所以需要拓展一下是不是目标点的目标点可以被封禁的可能性...

2020-10-10 19:03:32 24

原创 【学习笔记】n个数里求kth

目标用O(n)O(n)O(n)时间找到kthkthkth原题是NOIp2008NOIp2008NOIp2008提高组的完形用类似快排的思想,对于一段区间的数,每次选择一个点tmptmptmp为枢轴点需要保证排好以后,tmptmptmp左边的数都比它小,右边的数都比它大然后看看目标kkk在左区间还是右区间,继续具体排序对于tmptmptmp的选择可以用随机数,也可以用l+r>>1l+r>>1l+r>>1,实测后者其实更快理论上复杂度是O(n)O(n)O(n)的,

2020-10-10 19:02:35 18

原创 【题解】LuoGu3239:亚瑟王

原题传送门令pip_ipi​表示第iii个技能的概率ans=∑pi∗dians=\sum p_i*d_ians=∑pi​∗di​令dpi,jdp_{i,j}dpi,j​表示前iii个技能,成功了jjj个的概率dpi,j=dpi−1,j∗(1−pi)r−j+dpi−1,j−1∗[1−(1−pi)r−j+1]dp_{i,j}=dp_{i-1,j}*(1-p_i)^{r-j}+dp_{i-1,j-1}*[1-(1-p_i)^{r-j+1}]dpi,j​=dpi−1,j​∗(1−pi​)r−j+dpi−1,

2020-10-05 11:03:46 18

原创 【题解】CF547B:Mike and Feet

原题传送门求出每个点向左延伸到lil_ili​,向右延伸到rir_iri​表示aia_iai​是ali到aria_{l_i}到a_{r_i}ali​​到ari​​最小的对于ansri−li+1=max(ansri−li+1,ai)ans_{r_i-l_i+1}=max(ans_{r_i-l_i+1},a_i)ansri​−li​+1​=max(ansri​−li​+1​,ai​)ansi=max(ansi,ansi+1)ans_i=max(ans_i,ans_{i+1})ansi​=max(ansi

2020-10-05 09:19:12 34

原创 【题解】CSP-S2019初赛:取石子

(取石子)Alice和Bob两个人在玩取石子游戏。他们制定了nn条取石子的规则,第ii条规则为:如果剩余石子的个数大于等于a[i]a[i]且大于等于b[ilb[il, 那么他们可以取走b[i]b[i]个石子。他们轮流取石子。如果轮到某个人取石子, 而他无法按照任何规则取走石子,那么他就输了。一开始石子有mm个。请问先取石子的人是否有必胜的方法?有两种做法暴力dp:dpidp_idpi​表示iii是否必胜,对于一个规则(a,b)(a<=i),dpi∣=(dpi−b==0)(a,b)(a<=i

2020-09-30 21:46:28 606

原创 【题解】LuoGu6147:[USACO20FEB]Delegation G

原题传送门这道题是赛道修建赛道修建赛道修建的弱化版枚举KKK这里有两个优化KKK必须是(n−1)(n-1)(n−1)的因数KKK必须小于等于直径对于每个KKK,判断是否合理,那么就跑一遍树对于某一个点,下面有一堆儿子剩下来的链对于每条链,设长度为xxx,那么必须有一条长度为K−xK-xK−x 的链与之配对,否则这条链就必须跟着自己这个点一起往上传但是如果有多条链无法配对,跟着自己上传的链又最多只能有一条,那么就不合理Code:#include <bits/stdc++.h&g

2020-09-27 19:34:53 33

原创 【题解】LuoGu6146:[USACO20FEB]Help Yourself G

原题传送门把线段按照左端点排序然后令dpidp_idpi​表示第iii条线段为止的答案dpi=2∗dpi−1+2kdp_i=2*dp_{i-1}+2^kdpi​=2∗dpi−1​+2kkkk表示之前有多少条线段与自己没有交,这个可以用树状数组维护一下Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;const LL qy = 1000000007;L

2020-09-27 19:27:33 24

原创 【题解】LuoGu6145:[USACO20FEB]Timeline G

原题传送门因为原图是一个DAG,所以直接跑一个拓扑但是我一开始是用跑最长路的方法做的,虽然用spfaspfaspfa也可以但是我用了堆优dijkdijkdijk,就错掉了,所以这里抛出一个问题,为什么堆优不行?Code:#include <bits/stdc++.h>#define maxn 100010using namespace std;struct Edge{ int to, next, len;}edge[maxn << 1];queue <in

2020-09-27 19:24:46 31

原创 【题解】LuoGu4284:[SHOI2014]概率充电器

原题传送门套路期望dp把每个点不被充电的概率ansians_iansi​算出来,答案就是∑1−ansi\sum 1-ans_i∑1−ansi​令fuf_ufu​表示以uuu为根的子树,uuu不被充电的概率fu=(1−qu)∗∏(1−p(u,v)+p(u,v)∗fv)f_u=(1-q_u)*\prod (1-p(u,v)+p(u,v)*f_v)fu​=(1−qu​)∗∏(1−p(u,v)+p(u,v)∗fv​)但是除了根节点,其他节点的答案都是不充分的,所以要换根dpgug_ugu​表示每个点的真

2020-09-26 21:33:55 16

原创 【题解】CF1000G:Two-Paths

原题传送门这道题目和保卫王国非常的相似倍增dp记lll为w(u,v)w(u,v)w(u,v)fuf_ufu​表示,从uuu出发回到uuu,走以uuu为根的子树的答案fu+=max(0,fv−2l)f_u+=max(0,f_v-2l)fu​+=max(0,fv​−2l)fau,ifa_{u,i}fau,i​表示,从uuu,往上的第2i2^i2i个祖先dpu,idp_{u,i}dpu,i​表示,从uuu跑到fau,ifa_{u,i}fau,i​,中途可以跑子树的答案dpu,i=dpu,i−1+

2020-09-24 19:45:42 9

原创 【题解】LuoGu5423:[USACO19OPEN]Valleys P

原题传送门根据两个式子展开的题目首先按照高度从小到大排序好之后按顺序加点对于新加的这个点,在四周四个点,如果已经加入了,就合并,用并查集维护然后判断新加的点所属的连通块知否合法F=E+2−V,即块数=边数+2−点数F=E+2-V,即块数=边数+2-点数F=E+2−V,即块数=边数+2−点数F=1(边界框起来的一个大块)+元环个数+洞个数F=1(边界框起来的一个大块)+元环个数+洞个数F=1(边界框起来的一个大块)+元环个数+洞个数定义元环为一个单位小正方形,就是四个点都已经加入的然后合法就意

2020-09-22 16:44:19 23

原创 【题解】LuoGu5201:[USACO19JAN]Shortcut G

原题传送门先跑一遍最短路,求出nxtunxt_unxtu​表示我下一步走到哪里,然后跑一个拓扑Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;struct heap{ int node; LL len; bool operator < (const heap &x) const{return x.len < len; }};p

2020-09-20 18:37:31 120

原创 【题解】LuoGu5202:USACO19JAN]Redistricting P

原题传送门这个是双关键字的单调队列记HHH为1,GGG为-1,统计前缀和暴力dpi=min(dpj+(sumi>=sumj))(i−j<=m)dp_i=min(dp_j+(sum_i>=sum_j))(i-j<=m)dpi​=min(dpj​+(sumi​>=sumj​))(i−j<=m)用单调队列维护,如何判断两个数在队列中的先后?对于两个数p,qp,qp,qdpp!=dpqdp_p!=dp_qdpp​!=dpq​,dpdpdp值小的那个优先dpp=dp

2020-09-20 18:31:19 21

原创 【题解】CF993D:Compute Power

原题传送门01分数规划∑a∑b<=mid\frac{\sum a}{\sum b}<=mid∑b∑a​<=mid∑a<=mid∗∑b\sum a<=mid*\sum b∑a<=mid∗∑bwi=ai−mid∗biw_i=a_i-mid*b_iwi​=ai​−mid∗bi​问是否存在∑wi<=0\sum w_i<=0∑wi​<=0先根据aaa从大到小分组,相同的aaa一组,组内按照bbb升序这样满足严格小于的那个条件可以dpi,jdp_{i

2020-09-20 11:12:24 28

原创 【题解】CF922E:Birds

原题传送门这是一道背包问题dpidp_idpi​表示共打了iii只鸟剩余最大魔法值每次走一棵树,所有dpdpdp值+X+X+X每次把鸟看成物品,二进制拆分做01背包Code:#include <bits/stdc++.h>#define maxn 1010#define maxm 10010#define LL long longusing namespace std;LL W, B, X, cost[maxn], power[25], c[maxn], dp[maxm],

2020-09-18 21:32:20 27

原创 【题解】CF915D:Almost Acyclic Graph

原题传送门如果枚举删边,然后拓扑判环,会小T一点然后发现其实可以枚举哪个点入度-1,在判环,等价于删边优化到了O(n2)O(n^2)O(n2)Code:#include <bits/stdc++.h>#define maxn 500010using namespace std;struct Edge{ int to, next;}edge[maxn << 1];int num, head[maxn], d[maxn], deg[maxn], n, m, flag

2020-09-17 21:32:36 29

原创 【题解】CF906C:Party

原题传送门状压01状态中所有1表示互相认识staista_istai​表示初始iii的交际圈,如果iii在状态JJJ中,可以直接把staista_istai​的状态直接并入JJJ,表示选择iii,把他认识的人都互相认识一遍然后记录路径,idJid_JidJ​表示该状态是通过选择idJid_JidJ​这个人来的,preJpre_JpreJ​表示上个状态Code:#include <bits/stdc++.h>#define maxn 5000010#define maxm 25u

2020-09-16 21:26:33 20

空空如也

空空如也

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