
思维题
lahlah_
沉浸 尊重
展开
-
CF891E Lust
https://www.luogu.com.cn/problem/CF891E推一下不难发现,最后答案就是∏ai−∏(ai−bi)\prod a_i-\prod(a_i-b_i)∏ai−∏(ai−bi)bib_ibi表示最终第iii个位置的减少量,主要是考虑后面那个东西怎么求对于一组∑bi=k\sum b_i=k∑bi=k,它的期望是1nkk!∏bi!∏(ai−bi)\frac{1}{n^k}\frac{k!}{\prod b_i!}\prod(a_i-b_i)nk1∏bi!k!∏(a原创 2022-04-12 08:53:37 · 395 阅读 · 0 评论 -
luogu P1989 无向图三元环计数
https://www.luogu.com.cn/problem/P1989经典问题,对于原图的每一条边u−>vu->vu−>v,如两点的度数不一样,那么就度数小的连向度数大的,否则编号小的连向编号大的然后考虑新图的每一条边u−>vu->vu−>v遍历和vvv相连的每个点www,看www是否和uuu相连,不难发现这个的时间复杂度是∑out[vi]\sum out[v_i]∑out[vi]的那么如何证明这个时间复杂度是O(mm)O(m\sqrt{m})O(mm)原创 2022-04-06 15:56:19 · 465 阅读 · 0 评论 -
CF1588F Jumping Through the Array
https://www.luogu.com.cn/problem/CF1588F之前见过类似的套路,不过是用来优化空间的,就是莫队的时候分几块来分别跑要说的话更加类似KD−treeKD-treeKD−tree每n\sqrt{n}n次操作后重构?考虑每根号次操作放一起处理把操作2,32,32,3涉及到的点设为关键点,不难发现,这个在一个环上,这个关键点到上一个关键点之前到贡献是一样的,可以缩成一个点就像这样,缩完点之后就只有n\sqrt{n}n个点了,那么询问的时候就只需要枚举每一个点,然后在原创 2022-04-06 14:44:43 · 251 阅读 · 0 评论 -
NOIonline 2022
降大智了属于是考后光速补完A 丹钓战sb题,首先可以处理出一个L[i]L[i]L[i]表示iii这个点最多可以向前一路pop到那个点然后就可以用扫描线+树状数组简单维护了处理L[i]L[i]L[i]可以简单的用个单调栈模拟题目,但是我考场上降智了,去找了个性质,首先可以二分+st表找出iii前面一串比a[i]a[i]a[i]小的区间[l,i][l,i][l,i],然后找这个区间中最小的L[pos]L[pos]L[pos] 发现a[L[pos]−1]a[L[pos]-1]a[L[pos]−1]一定是原创 2022-04-02 11:13:51 · 616 阅读 · 0 评论 -
杂题乱做 PART 3
ps:主要是把之前做的有点意思的题总结一下CF1129D Isolation思维难度: (8) 分块优化DPDPDP确实是没写过,也没想过,听提示才想到的代码难度: (5)sol: 首先不难想到考虑扫描线,对于每个左端点,记录gs[l]gs[l]gs[l]表示[l...r][l...r][l...r]出现次数为111的数的个数然后对于每加入的一个iii,即上一个和iii一样的是lst[i]lst[i]lst[i],相当于是把[lst[lst[i]]...lst[i]−1][lst[lst[原创 2022-04-02 10:52:22 · 822 阅读 · 0 评论 -
luogu P3600 随机数生成器
https://www.luogu.com.cn/problem/P3600每一步转换都不难,但许多步连在一起就不简单了考虑怎么计算最大值为xxx的概率这个也不好算,考虑算≤x\le x≤x的概率也就是说对于每个区间,至少有一个数是≤x\le x≤x的概率概率不好算,考虑算方案数总的方案数显然是mnm^nmn,考虑dpdpdp设f[i][j]f[i][j]f[i][j]表示已经填了前iii,填了jjj个≤x\le x≤x的,钦定第iii个是≤x\le x≤x的方案数不难发现对于每个xxx,可原创 2022-03-31 20:50:00 · 320 阅读 · 0 评论 -
luogu P4240 毒瘤之神的考验
luogu P4240 毒瘤之神的考验首先有一个重要的式子ϕ(ij)=ϕ(i)ϕ(j)gcd(i,j)ϕ(gcd(i,j)\phi(ij)=\frac{\phi(i)\phi(j)\gcd(i,j)}{\phi(\gcd(i,j)}ϕ(ij)=ϕ(gcd(i,j)ϕ(i)ϕ(j)gcd(i,j)这题就直接这么推=∑d=1dϕ(d)∑i=1n/d∑j=1m/dϕ(id)ϕ(jd)[gcd(i,j)=1]=\sum\limits_{d=1}\frac{d}{\phi(d)}\sum\limits原创 2022-03-24 09:11:55 · 247 阅读 · 0 评论 -
杂题乱做 PART 2
ps:主要是把之前做的有点意思的题总结一下原创 2022-03-18 20:34:46 · 476 阅读 · 0 评论 -
杂题乱做 PART 1
ps:主要是把之前做的有点意思的题总结一下原创 2022-03-18 15:27:37 · 366 阅读 · 0 评论 -
luogu P4249 [WC2007]剪刀石头布
https://www.luogu.com.cn/problem/P4249考虑啥限制都没有的情况,方案数是(n3)=n(n−1)(n−2)6\binom{n}{3}=\frac{n(n-1)(n-2)}{6}(3n)=6n(n−1)(n−2)一个三元环(a,b,c)(a,b,c)(a,b,c)是长啥样的?容易发现就是原创 2022-03-16 20:29:11 · 397 阅读 · 0 评论 -
AT3871 [AGC021E] Ball Eat Chameleons
https://www.luogu.com.cn/problem/AT3871建议先做[SCOI2010]生成字符串好了直接来分析这一题假设红蓝球数为R,BR,BR,BR+B=kR+B=kR+B=k首先一定要满足R≥BR\ge BR≥B如果R≥B+nR\ge B+nR≥B+n显然随便拍就行,容易计算(R+BR)\binom{R+B}{R}(RR+B)如果R<B+nR < B+nR<B+n 必定是每个变色龙先吃红,再吃蓝,再吃红交替刚好有R−BR-BR−B个变色龙红的比蓝的原创 2022-03-11 21:38:05 · 353 阅读 · 0 评论 -
CF1043F Make It One
https://www.luogu.com.cn/problem/CF1043F注意到质因子的个数不会很多,然后每次操作至少要减少一个,所以答案的上界很小考虑美枚举答案,但是要求gcdgcdgcd为1的并不好求考虑将判定性问题变为计数类问题容斥,枚举gcdgcdgcd,容易得到f[d]=(cnt[d]ans)f[d]=\binom{cnt[d]}{ans}f[d]=(anscnt[d]),容斥系数就是μ\muμ至于模数随便选一个即可,反正冲突概率极小cnt[i]cnt[i]cnt[i]我是用高原创 2022-03-04 14:44:49 · 275 阅读 · 0 评论 -
CF1137简要题解
https://codeforces.com/contest/1137插入原来的大概50+不过是几年前的比赛了,参考价值不是很大A不想写,爬了B不难发现直接跑个KMP即可codeC为什么要卡栈内存为什么为什么???!!具体思路是先拆点,每天每种博物管一个点,可以发现同一种博物馆如果联通的话一定是在一个强连通分量里面的于是缩个点,然后跑树上最长路径即可为什么dfs前面一定要加inline!!!!codeD构造题真掉头发先考虑每次走一个0,每两次走一个1,可以发现走了ttt原创 2022-03-04 14:14:59 · 322 阅读 · 0 评论 -
AT4119 [ARC096C] Everything on It
https://www.luogu.com.cn/problem/AT4119你说原来那个题面蛮好的你换了它干什么你告诉我截一张qiuly神仙的翻译换汤不换药啊设f[i]f[i]f[i]表示iii种酱原创 2022-02-25 21:57:26 · 274 阅读 · 0 评论 -
luogu P7603 [THUPC2021] 鬼街
https://www.luogu.com.cn/problem/P7603和gym 102331 F. Fast Spanning Tree 这题一样的套路把监控事件的yyy平均分配到每个管辖的区域里,作为其中一个阈值限制,然后每次加的时候如果有一个点碰到阈值就暴力把剩下的重新分配。假设管辖的区域不超过666个,因为每次碰到阈值,至少会让阈值减少16\frac{1}{6}61,也就是说至少会变为原来的56\frac{5}{6}65,容易得到时间复杂度为O(6nlognlog65y)O(6nlo原创 2022-02-25 16:45:36 · 778 阅读 · 0 评论 -
gym 102331 F. Fast Spanning Tree
https://codeforces.com/gym/102331/problem/F学到许多首先有个显然的性质,假设一条边两边的权值和分别是x,yx,yx,y,这条边的要求是SSS由x+y≥Sx+y \ge Sx+y≥S 可以得到x≥S2 or y≥S2x \ge \frac{S}{2} \ \ or \ \ y \ge \frac{S}{2}x≥2S or y≥2S我们把这条边的限制(上界)平均分别丢到原创 2022-02-25 16:30:25 · 485 阅读 · 0 评论 -
AT3912 Antennas on Tree
https://www.luogu.com.cn/problem/AT3912想了一会,大概想到了考虑选择的的那kkk个点连起来,一定是一棵树,考虑把这棵树挖掉,剩下的点度数一定都≤2\le 2≤2(原树上),否则一定会存在一对兄弟节点的坐标是相同的那么解法也很简单了,只需要对于每个度数为111的点,暴力往上跳,找到第一个度数≥2\ge 2≥2的,打个标记,容易发现在一个标记下支配的叶子结点最多只能剩下一个不选,那么用叶子结点数减去标记点数即可code:#include<bits/stdc+原创 2022-02-19 22:02:08 · 243 阅读 · 0 评论 -
AT2300 [ARC068C] Snuke Line
https://www.luogu.com.cn/problem/AT2300重新想的时候又没有想出来首先有一个显然的性质,如果一个区间的长度len≥dlen\ge dlen≥d,那么这个区间的一定能被ddd买到先把区间按照长度排序,比当前ddd大的直接加入答案否则把[li,ri][l_i,r_i][li,ri]插入树状数组中,然后暴力枚举kdkdkd,因为是调和级数的,所以最后的时间复杂度为O(nlnn+nlogn)O(n\ln n+nlogn)O(nlnn+nlogn)代码实现非常简单原创 2022-02-19 21:37:00 · 377 阅读 · 0 评论 -
AT3728 [ARC087D] Squirrel Migration
https://www.luogu.com.cn/problem/AT3728想偏了一些首先对于每条边,假设断开后两边的大小分别为s1,s2s1,s2s1,s2,那么答案的上界就是∑e∈E2×min(s1,s2)\sum_{e\in E}2\times \min(s1,s2)e∈E∑2×min(s1,s2)考虑把重心设为根,容易发现,上面那个min\minmin只会取到子树大小,因为子树一定小于等于另外一部分考虑关于重心的儿子来容斥就行了,设f[i]f[i]f[i]表示钦定有iii个点不合法原创 2022-02-19 21:23:14 · 503 阅读 · 0 评论 -
AT3576 Popping Balls
https://www.luogu.com.cn/problem/AT3576又盯了半个多小时才看懂之前写的是啥妙妙组合数学思维题啊啊首先不管s,ts,ts,t,要拿红球肯定是从111开始拿,不亏假设要拿第一个蓝球了,那么我们可以把ttt设到当前蓝球第一个位置,不亏假设ttt那个位置已经没有球了,但还是想要拿篮球,那把sss设到现在蓝球的第一个位置,不亏然后就可以考虑计算了假设从ttt处拿了iii个蓝球,那么要从111处拿B−iB-iB−i个蓝球,才能让ttt那个位置没有球,进入第三步假设从原创 2022-02-19 10:41:32 · 364 阅读 · 0 评论 -
AT2046 [AGC004F] Namori
https://www.luogu.com.cn/problem/AT2046写这题的时候完全没有想清楚啊啊重新看的时候盯了一个小时都没有看懂我在写啥神仙思维分析题树首先考虑树的情况,可以把原图二分图染色一下,然后每次同色的取反就变成了异色的交换原问题变为是否能把所有的黑白点位置交换摸张官方题解的图把给点记为111,白点记为−1-1−1,a[u]a[u]a[u]为子树和显然a[rt]=0a[rt]=0a[rt]=0,答案的下界为∑∣a[rt]∣\sum |a[rt]|∑∣a[rt]∣不原创 2022-02-19 09:32:13 · 204 阅读 · 0 评论 -
CF765F Souvenirs
https://www.luogu.com.cn/problem/CF765F挺不错的一道题,首先考虑扫描线,对于每个iii,找j<i,a[j]>a[i],jj<i,a[j]>a[i], jj<i,a[j]>a[i],j最大的用权值线段树可以轻易维护假设找到一个jjj,然后再找(a[i],a[j])(a[i],a[j])(a[i],a[j])之间的时间复杂度不优考虑再找到的一个是j′j'j′发现必须要满足a[j′]−a[i]<a[j]−a[i]a[j']原创 2022-02-18 19:20:51 · 391 阅读 · 0 评论 -
luogu P5406 [THUPC2019]找树
https://www.luogu.com.cn/problem/P5406首先要意识到这题不是最优化问题,而是计数类问题(光这点就不简单了)考虑矩阵树定理计算的是什么∑T∏we∈T\sum_{T}\prod w_{e\in T}T∑∏we∈T这里∏\prod∏不一定是乘法,题目给出的这几个运算爷可以于是乎可以构造集合幂级数xwx^{w}xw,注意到FWTFWTFWT是线性运算,可以叠加,先FWTFWTFWT完,求个行列式,然后再IDFTIDFTIDFT回去即可code:#include&原创 2022-02-18 09:24:37 · 203 阅读 · 0 评论 -
CF1267G Game Relics
https://www.luogu.com.cn/problem/CF1267G麻了,回头看的时候一下子不会算贡献了白写了可还行首先考虑抽卡的期望,假设已经抽了iii个圣遗物出来,要出i+1i+1i+1个圣遗物的期望是E(i)=in(E(i)+x2)+n−in×(x+E(i+1))E(i)=\frac{i}{n}(E(i)+\frac{x}{2})+\frac{n-i}{n}\times(x+E(i+1))E(i)=ni(E(i)+2x)+nn−i×(x+E(i+1))E(i)−E(i+1)原创 2022-02-17 08:24:16 · 174 阅读 · 0 评论 -
luogu P3647 [APIO2014] 连珠线
https://www.luogu.com.cn/problem/P3647我写DP像cxk发现只有两种连边的方式假设最优的策略已经给了出来,那么一定存在选定某个点为根的时候,只存在第一种脸边的情况于是跑换根DP即可具体的话设f[u][0/1]f[u][0/1]f[u][0/1]表示uuu是否作为中间点uuu往上延伸,的最大得分转移还是挺显然的f[u][0]=∑v∈sonmax(f[v][0],f[v][1]+w[v])f[u][0]=\sum\limits_{v\in son} \max原创 2022-02-16 10:39:20 · 392 阅读 · 0 评论 -
CF1067E Random Forest Rank
https://www.luogu.com.cn/problem/CF1067E丢个同学写的:https://www.cnblogs.com/klii/p/15885851.html主要的结论是:一个树/森林的邻接矩阵的秩,等于最大匹配数*2。code:#include<bits/stdc++.h>#define mod 998244353#define N 500050#define ll long longusing namespace std;const ll inv2原创 2022-02-16 09:55:59 · 467 阅读 · 0 评论 -
CF468E Permanent
https://www.luogu.com.cn/problem/CF468E不会做,差点把心态搞没考虑积和式的组合意义可以看做是一个二分图的所有的完美匹配的边权乘积的和考虑把每条边www拆成111和w−1w-1w−1,那么对于w−1w-1w−1的的边构成的二分图,只需要找它的任意一个匹配,然后直接乘上未匹配的点的阶乘即可(剩下的点随意匹配)。状压DPDPDP即可,考虑优化,注意到如果某一列后面都不会再用到了,可以不状压这一列,分析可得最坏可以被卡到O(m22m2)O(m^22^{\frac{m}原创 2022-02-16 09:45:58 · 252 阅读 · 0 评论 -
CF1268E Happy Cactus
https://www.luogu.com.cn/problem/CF1268E就这还3400???首先考虑一棵树的情况,设一开始f[i]=1f[i]=1f[i]=1把边按边权从大到小插入,假设插入边(u,v,i)(u,v,i)(u,v,i)显然f[u]=f[v]=f[u]+f[v]f[u]=f[v]=f[u]+f[v]f[u]=f[v]=f[u]+f[v]考虑仙人掌的情况,先考虑一个环,无非就是链接最小边的时候,最大边两端的会被多算一次,减掉即可设g[i]=f[u]+f[v]g[i]=f[u]原创 2022-02-16 09:20:15 · 157 阅读 · 0 评论 -
luogu P4183 [USACO18JAN]Cow at Large P
https://www.luogu.com.cn/problem/P4183学到许多显然要求出来一个f[u]f[u]f[u]表示离uuu最近的叶子距离考虑对于一个节点的情况,把它设为根求出来以它为根的每个点的深度,记为dep[u]dep[u]dep[u]手玩一下容易发现对于每个节点,叶子是否需要的放判断是f[u]<=dep[u],f[fa]>dep[fa]f[u]<=dep[u],f[fa]>dep[fa]f[u]<=dep[u],f[fa]>dep[fa]原创 2021-12-21 16:02:27 · 22986 阅读 · 0 评论 -
luogu P4707 重返现世
https://www.luogu.com.cn/problem/P4707kthmin−maxkthmin-maxkthmin−max容斥入门题懒得证明了式子就是max(S)=∑T⊆S(−1)∣T∣−k(∣T∣−1k−1)min(T)\max(S)=\sum_{T⊆S}(-1)^{|T|-k}\binom{|T|-1}{k-1}\min(T)max(S)=T⊆S∑(−1)∣T∣−k(k−1∣T∣−1)min(T)设计DPf[i][j][k]f[i][j][k]f[i][j][k]表示考原创 2021-12-17 08:59:11 · 171 阅读 · 0 评论 -
luogu P7323 [WC2021] 括号路径
https://www.luogu.com.cn/problem/P7323考场上降大智了首先发现如果x−>y,y−>zx->y,y->zx−>y,y−>z合法,那么x−>zx->zx−>z也一定合法那么对于这样的同种颜色的两条边y−>x,z−>xy->x,z->xy−>x,z−>x,那么z−>yz->yz−>y一定合法就可以把z,yz,yz,y合并一路合并下去,再看看每个集合里有多少个,简原创 2021-12-17 08:37:00 · 145 阅读 · 0 评论 -
luogu P7324 [WC2021] 表达式求值
https://www.luogu.com.cn/problem/P732470分的DP非常好想和好写我们其实不用关心具体的值是什么,只用关心相对大小拿个真值表进去随便搞搞即可code:#include<bits/stdc++.h> // 11 : < 12 : > 13 : ?#define N 100050#define mod 1000000007#define ll long longusing namespace std;void原创 2021-12-17 08:33:21 · 179 阅读 · 0 评论 -
CF1519E Off by One
https://www.luogu.com.cn/problem/CF1519E可以考虑连边(aibi+1)−(cidi)(\frac{a_i}{b_i}+1)-(\frac{c_i}{d_i})(biai+1)−(dici)(aibi)−(cidi+1)(\frac{a_i}{b_i})-(\frac{c_i}{d_i}+1)(biai)−(dici+1)然后跑最大匹配code:#include<bits/stdc++.h>#define N 400050原创 2021-12-16 21:26:40 · 142 阅读 · 0 评论 -
luogu P3643 [APIO2016]划艇
https://www.luogu.com.cn/problem/P3643经典题把范围离散化后转移可以做到O(n3)O(n^3)O(n3)方案数可以用用组合数计算code:#include<bits/stdc++.h>#define mod 1000000007#define N 2005#define ll long longusing namespace std;int n, a[N], b[N], c[N], gs;ll f[N], C[N], inv[N];i原创 2021-12-16 20:57:23 · 278 阅读 · 0 评论 -
CF724E Goods transportation
https://www.luogu.com.cn/problem/CF724E模拟最小割nb题首先可以轻易得到最大流的建图,每个点往后连边,大小为CCC,SSS向iii连pip_ipi,iii向TTT连sis_isi因为最大流=最小割考虑DP出最小割设f[i][j]f[i][j]f[i][j]为考虑了前iii个,有jjj个割掉了−>T->T−>T的边然后看当前点割那条边来转移code:#include<bits/stdc++.h>#define ll lo原创 2021-12-16 20:44:46 · 135 阅读 · 0 评论 -
CF176E Archaeology
https://www.luogu.com.cn/problem/CF176E非常重要的一个trick,我竟然不知道首先把关键点拿出来,按照dfsdfsdfs序排后为x1,x2,x3,x4,....,xkx_1,x_2,x_3,x_4,....,x_kx1,x2,x3,x4,....,xk最小联通块大小=12∗(dis(x1,x2)+dis(x2,x3)+dis(x3,x4)+...+dis(xk,x1))=\frac{1}{2}*(dis(x_1,x_2)+dis(x_2,x_3)+di原创 2021-12-16 20:08:06 · 126 阅读 · 0 评论 -
CF1188D Make Equal
https://www.luogu.com.cn/problem/CF1188D奇妙DP题https://www.luogu.com.cn/blog/RUI-R/solution-cf1188d重点是要知道可以分别考虑每一位,按后几位排序后进位的一定是一个前缀,这样就可以优化状态数code:#include<bits/stdc++.h>#define ll long long#define N 200050using namespace std;ll a[N], S;int原创 2021-12-16 20:03:58 · 169 阅读 · 0 评论 -
CF605E Intergalaxy Trips
https://www.luogu.com.cn/problem/CF605E首先肯定对E排序式子推出来这样然后类似dijkstra一样转移即可有1点阴间code;#include<bits/stdc++.h>#define N 2050using namespace std;int n, vis[N];double p[N][N], prod[N], E[N];int main() { scanf("%d", &n); for(int i = 1原创 2021-12-10 11:18:56 · 576 阅读 · 0 评论 -
CF516D Drazil and Morning Exercise
https://www.luogu.com.cn/problem/CF516D注意到minfx\min f_xminfx的一定是在直径上以这个点为根,可以得到一个fff随深度递增的树直接树上差分,找最大的即可code:#include<bits/stdc++.h>#define N 400050#define ll long longusing namespace std;struct edge { int v, c, nxt;} e[N << 1]原创 2021-12-10 10:48:20 · 172 阅读 · 0 评论 -
AT4995 [AGC034E] Complete Compress
https://www.luogu.com.cn/problem/AT4995枚举最后移动到的那个点,然后考虑DP设f[u]f[u]f[u]表示以uuu结点为子树尽量多匹配点的移动的距离和(把多少对移动到)草讲不清楚,看代码吧code:#include<bits/stdc++.h>#define N 2005using namespace std;int dis[N], siz[N], a[N], n, f[N], ans;vector<int> g[N];voi原创 2021-12-09 19:46:19 · 258 阅读 · 0 评论