自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

binarycopycode

人百我一,人万我十,舒服了

  • 博客(957)
  • 收藏
  • 关注

原创 洛谷P2757 [国家集训队]等差子序列

https://www.luogu.com.cn/problem/P2757#include<bits/stdc++.h>using namespace std;typedef unsigned long long ull;const int maxl=1e5+10;const int bas=1423333;int n,ans;int a[maxl],pre[maxl],suf[maxl];ull mi[maxl];struct bit{ ull b[maxl];

2021-01-28 00:59:31 187

原创 csacademy rooms

https://csacademy.com/contest/archive/task/rooms/statement/注意到每个rooms都是连续的,那么我们可以给每个room设定一个代表点,那么对于一个矩形中的所有room,分为两种分别是代表点在矩形中的,第二种是代表点在矩形外面的,但是矩形外面要进来的,必须经过边界,那么我们只要枚举边界上的点看他的代表点在不在矩形内就行了,再搞个vis数组记录一下看已经加进答案了没#include<bits/stdc++.h>using name

2021-01-27 20:59:34 106

原创 gym102861E. Party Company

https://codeforces.com/gym/102861/problem/E听课也更不上,比赛过了一车人的题也不会,没了啊这题很显然我们可以看出,由于最后一定是一个连通块属于同一个组,那么由组长o我们可以倍增到最上面的领导o1,使得最上面恰好逼近r那么最显然的想法就是从这个根节点o1开始,他子树中所有>=l的都会+1,那么子树问题显然可以用dfs序来维护,按dfs序标号,然后分块对每块内部排序,然后左右边界的块暴力找,中间的块一定在子树中,就直接二分后用差分数组作区间加法O(

2021-01-26 23:38:26 405

原创 AtCoder Beginner Contest 189 F - Sugoroku2

https://atcoder.jp/contests/abc189/tasks/abc189_f这题发现倒着推就是个解方程了设dp[i]表示从i位置到结束还要走i步可知dp[i]=(dp[i+1]+dp[i+2]...dp[i+m])/m+1,如果dp[i+k]是回到0的那么dp[i+k]=dp[0]所以我们记录一个关于dp[0]的参数k和一个常数b,dp[i]=k*dp[0]+b然后从后往前扫,维护一个滑动窗口的总参数和k和常数b那么dp[i]=(k*dp[0]+b)/m+1

2021-01-23 21:44:51 386 2

原创 codeforces1474D. Cleaning

https://codeforces.com/contest/1474/problem/D先考虑不能变的情况,由于a[1]要被删光,那么一定是a[1]-=a[1],a[2]-=a[1],依次类推b[i]=a[i]-b[i-1],能消除的充要条件是所有b[i]>=0且b[n]=0然后我们考虑枚举每一个相邻位置看可不可行,我们发现相邻位置变化对于奇数i的b[i]和偶数i的b[i]的改变是一样的那么就只要看一下1-i-1这段b[i]是不是都大于0,再看看i-n这段区间的奇数小标的最小值和偶数下标

2021-01-20 01:03:37 310

原创 codeforces1467E. Distinctive Roots in a Tree

https://codeforces.com/contest/1467/problem/E这题反过来想以后就很简单了,当时正着想半天都想不出来怎么搞,但是我们反过来标记那些不合法点,只要被标记一次他就是不合法的,那么就很容易了不合法的时候分两种情况,如果当前点a[u],他的祖先节点中存在a[u],那么找到最近的那个vis[a[u]],那么vis[a[u]]向上,u向下,都是非法点,那么我们利用dfs序对树的这个值进行差分,就可以O(1)标记第二种情况就是如果它的祖先节点中不存在a[u],但是之前

2021-01-19 22:13:20 106

原创 codeforces1473E. Minimum Path

https://codeforces.com/contest/1473/problem/EC不会写结果E这个水题没写当时读完题就推出一些结论,因为每次都是减掉最大值,加上最小值,所以没必要重复走一条路,那么这个肯定是个简单路径,然后我们相当于是把最大值去掉,把他变成最小值再加进去,当时就觉得是分层图最短路了,但我需要维护路径最大值最小值吗,当时没想清楚但实际上我们只考虑最后的结果,因为要让这个东西最小,我们把去掉最大值和最小值*2分开来,直接跑最短路,最后的结果一定是去掉了最大值,让最小值*2的

2021-01-18 20:43:57 119

原创 codeforces1473C No More Inversions

https://codeforces.com/contest/1473/problem/C摸鱼太久不训练智商下降的严重,1 2 3 2 1 和3 2 1 2 3 逆序对我vp的时候数得不一样,直接得出结论 回文串逆序对数量跟安排顺序有关,然后这题就没了,然后E题也没了我们考虑对于一个回文串,不管他们的字母是什么,我们把他们离散化1-k,长度是2k-1那么对于这题的后面一段回文串,设最大值的教左位置p1,那么另一个就在2k-p1,他们贡献的逆序对数量是2k-1-p1-1+2k-1-(2k-p1)=

2021-01-18 20:16:34 172

原创 AtCoder Beginner Contest 188 F - +1-1x2

https://atcoder.jp/contests/abc188/tasks/abc188_fmd第二次被ABCF卡住,菜得一比我们观察得到一个比较显然的结论,那就是如果y是偶数,那么x>=y/2时,要么直接到y,要么先到y/2再到y,因为如果你走到y/2+1再乘2,最后要减去2,所以在小的时候就要尽量满足后来差得越少,不然一次乘2相差就放大一倍如果y是奇数,x>y/2,则要么到y/2+1再到y,要么直接到y特别地,x>=y时,只能减法得到y那么我们可以脑补一下最后

2021-01-12 09:09:15 315

原创 codeforces1467D. Sum of Paths

https://codeforces.com/contest/1467/problem/D这题要修改每个a[i]然后得到最后的值,那么肯定就要求出每个a[i]对最后的答案有多少次贡献cnt[i][j]表示第i步走到j的位置,前缀有多少可能,num[i][j]第i步从j开始走,走完k步,后缀有多少可能那么在第i步用到a[j]的方案数就是cnt[i][j]*num[i][j]这个思路有点像求桥的时候正反跑一遍方案数可以用pre[i]*fpre[i]=sum他就是一个必经点#include&

2021-01-09 00:48:56 171

原创 codeforces1467 C. Three Bags

https://codeforces.com/contest/1467/problem/C还好用没用算分号打这场。。。又是找规律又是计数又是阅读理解题,极不友好这题本质就是每个数字最后前面是正号还是负号的问题找规律可以发现要么最后所在的那个集合,他原本的数字都可以全是正号,然后另外两个集合分别选最小的为负号,其他都是正号然后坑点是我们其实可以让一个集合全是负号,一个集合全是正号,再转移到最后所在的集合#include<bits/stdc++.h>using namespa

2021-01-09 00:37:32 425

原创 codeforces1472G. Moving to the Capital

https://codeforces.com/contest/1472/problem/G一开始ans[i]=d[i]我们按照离1的距离从大到小枚举点u然后枚举他的出边v,如果d[u]<d[v]说明u可以走到v,之后再用一次2,且v已经被处理过了,如果d[u]>=d[v]说明走这条边就要用到1次2了,那么之后就只能用1,那么d[v]就是u走u->v能得到的最小值了#include<bits/stdc++.h>using namespace std;typede

2021-01-05 01:55:24 426 1

原创 codeforces1472 F. New Year‘s Puzzle

https://codeforces.com/contest/1472/problem/F首先我们吧colum离散化,然后对于相邻两个c,他们之间的2*2的矩阵都是可以删除的,对最后的安排结果不会造成影响,那么其实坐标就让他要么差1要么差2然后再最左边的c的左边和最右边的c的右边一定都是竖着放满的,如果影响到中间是肯定有问题的最后就从左到右状压dp扫过去就行了,0表示2个都不用向右,1表示上面的放一个横的,要拓展到右边,2表示下面的,3表示上下都向右拓展#include<bits/s

2021-01-05 01:52:36 359

原创 codeforces1472E Correct Placement

https://codeforces.com/contest/1472/problem/E首先我们把第一维都变成较长边,第二维为较短边,然后按第一维排序然后维护一个第一维递增但较短边下降的序列,因为如果较长边也较小,较短边也较小,那肯定前面的好然后对于每个矩形就看有没有第一维小于它的,第二维也小于他的,那么直接维护个前缀最小值就行了#include<bits/stdc++.h>using namespace std;typedef long long ll;const

2021-01-05 01:47:36 485

原创 AtCoder Beginner Contest 187 F - Close Group

https://atcoder.jp/contests/abc187/tasks/abc187_f有点像小米决赛的G题啊,所以就秒了dp[i]表示i这个状压状态,最少可以是多少连通块组成先预处理看这一个状态能不能用一个连通块,即全联通,那就枚举每个点看他与其他点有没有连上,可以预处理出每个点与哪些点相连了,然后用位运算O(1)判断然后再枚举i的所有子集,看能不能合并复杂度就是3^n#include<bits/stdc++.h>using namespace std;

2021-01-02 21:48:31 413

原创 2020ByteDance Camp网络选拔赛 F Interactive Valuer

艹 啊,不会L啊,打了一半去南京热身赛了,队友后面的题也不会。。。前面有没有好哥哥放弃一下名额啊。。。这题就是大模拟就完了,因为可能有环,那我们就强连通分量先缩点,然后resnum记录每个testcase还有多少没确定的subtask需要测他如果一个subtask中的一个点没过,那么就dfs所有依赖于他的全部标记为失败,并把所有要问的测试点resnum[x]--每次找到离now最近的还需要测的点也就是resnum[]>0...

2020-12-19 22:24:22 194

原创 codeforces1463 D. Pairs

https://codeforces.com/contest/1463/problem/DMy vegetable exploded这题关键要想到x一定时一段连续的可行,然后有些数字必须要取max,有些必须要取min得到,那么我们吧这些必取的去掉,中间一段就是x的可行值了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=3e5+10;int n,m,k,cnt,t

2020-12-18 20:59:31 285

原创 codeforces1463B. Find The Array

https://codeforces.com/contest/1463/problem/Bvp上海那个签到构造也不会,这个签到构造也不会b1=1 a[i] 1 a[i]1b2=a[i] 1 a[i] 1 a[i]这两个总有一个差值满足,因为加起来刚好就是S+2n的还有一种构造方法就是用2次幂去逼近每一个a[i],2次幂之间一定互相整除#include<bits/stdc++.h>using namespace std;typedef long long ...

2020-12-18 20:57:58 208

原创 2020上海ICPC现场赛 C Sum of Log

https://ac.nowcoder.com/acm/contest/9925/C今天我们队配合问题极大。。。这道前期数位DP给数学队友在看他半天不会写,然后我这个数学辣鸡wa了一年D。。。交换一下两个题感觉能少2小时罚时。。。这题意思就是 i,j 随便选,不超过X,Y,然后i,j二进制上不能有相同的位都是1,然后一个数字的贡献就是他二进制上的最高位的1是哪一位+1就行了那么就是个简单数位DP,由于贡献仅与最高位有关,我们dp只要算数量就行了,然后用全局变量来计算答案dp[k][fmx][

2020-12-17 21:37:16 482

原创 2020上海ICPC现场赛L Traveling in the Grid World

https://ac.nowcoder.com/acm/contest/9925/L首先gcd(n,m)==1的话,那么肯定是两点之间线段最短然后如果不为1,那么gcd(n-1,m),gcd(n,m-1)一定有一个是1,虽然我不会证,但是想象一下gcd>1,那么一个-1,必定导致不能被那个gcd整除了,就算一个-1可以,另一个-1gcd一定不行,这个结论我数学队友也找不出反例那么我们就可以得到一个初值作为答案,我们发现这个初值已经够小了,所以我们猜想,最小值一定是只拐弯一次,而且拐点一定在

2020-12-17 21:05:01 532 2

原创 codeforces1132E Knapsack

https://codeforces.com/contest/1132/problem/E本来以为是道大容量背包的,结果是个技巧题。。。840是1-8的lcm,对于一个840,我们用1-8任意一个数全部填充满是相等的所以我们先测cnt[1-8]能有多少个840,为了最后搞01背包计算冗余量,我们直接给cnt[1-8]留至少1个840,不超过2个然后用剩下的数字去做01背包,复杂度就是840*8*840*8*2,这个数并不是很大然后如果tmp>w,那么说明把tmp直接减少到w/840

2020-12-16 23:40:23 137

原创 codeforces1462E2. Close Tuples (hard version)

https://codeforces.com/contest/1462/problem/E2#注意到m元组中坐标是各不相同的,且只要求最大值和最小值,所以我们可以把a排序,反正m元组是无视坐标顺序的然后我们就可以钦定这个m元组必选当前a[i],现在要求>=a[i]-k中选出剩下m-1个,预处理一下搞个组合数就行了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=

2020-12-16 00:46:01 155

原创 codeforces1462F. The Treasure of The Segments

https://codeforces.com/contest/1462/problem/F直接离散化然后搞in,out我们可以算出每个点被now个区间覆盖了这题我们要找到与其他区间相交最多的区间是哪一个那么记录r[i]表示从包含i的区间最右边在哪里,那么这个区间相交的区间数就是now+sum[r[i]]-sum[i],now表示l<=i且r>=i的区间,一定与当前区间相交,剩下与当前区间相交的数量就是a[i].l在i+1到r[i]之间的了#include<bits/std

2020-12-16 00:45:56 237

原创 2020小米邀请赛网络选拔赛第二场H Knapsack 决策单调性优化大容量多重背包 分治

https://ac.nowcoder.com/acm/contest/7502/H学习自https://blog.csdn.net/qq_30361651/article/details/109477637无论是分治还是单调队列搞二分都是O(w m logm)的,叉姐题解说的SMAWK算法中文网上都查不到相关的题解或者算法笔记,维基百科上倒是有。。。还是不学了,这个时限也是放log过的#include<bits/stdc++.h>using namespace std;t

2020-12-15 19:21:14 363

原创 gym101064L The Knapsack problem 超大容量完全背包

https://codeforces.com/gym/101064/problem/L由于是完全背包,所以我们可以合并背包容量设F(S)为S容量的最大值,我们可以把他分成两部分F(S)=F(A)+F(B),|A-B|<=maxw,因为如果>=maxw你总可以把大的部分的某个物品移动到小的那边,因为是完全背包,物品重复用,所以我们不考虑A,B中实际的物品情况那么我们就相当于对S进行二进制拆解了,要求出F(S),就求出F(S/2-maxw)-F(S/2+maxw)的值,然后把他们合并的时

2020-12-15 00:45:56 368

原创 AtCoder Beginner Contest 185 E - Sequence Matching

https://atcoder.jp/contests/abc185/tasks/abc185_e我一开始还觉得推式子转化DP,搞了半天然后最后发现直接dp[i][j]闭上眼睛就可以转移然后又因为dp[i][0],[0][i]没初始化纠结半天花了20多分钟,巨蠢无比#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=2010;int n,m,k,cnt,tot,c

2020-12-13 21:52:26 219

原创 codeforces1461E. Water Level

https://codeforces.com/contest/1461/problem/E首先是y<=x的,也就是k总是在不断减少的时候,那么直接O(1)判断,看第t天减少的时候会不会<l就行接下来是y>x的情况如果(x+y)<=r-l+1,那么说明我k刚好<=x的时候直接+y就可以加,且不会加爆r,那么只要第一天可行直接就可以无限苟(其实我当时没想清楚交了就过了,赛后雅米老师教我证的否则的话,那么说明我每次只能在固定的位置t,t=[l,l+x-1]向上补1个.

2020-12-12 01:28:46 208

原创 l洛谷P4719 【模板】“动态 DP“&动态树分治

https://www.luogu.com.cn/problem/P4719学习自https://www.luogu.com.cn/blog/Tweetuzki/solution-p4179题解中有些实现方面的细节没讲,我看了代码才理解的。。。就是把g分出来以后,树上的一条重链是整个top到end一起计算的,然后把这一段的值去更新fa[top]的g也就是更新val数组由于只有log段,每次又要把这一段整段的matrix值算出来也就是qry整段,再更新上面一个点的g,复杂度是log^2的

2020-12-11 20:22:22 249

原创 gym101741 C. Cover the Paths

https://codeforces.com/gym/101741/problem/C这题是受了18徐州的G题启发,在树上路径问题一般放到lca处讨论那么这题想到路径lca就很好贪心了,我们随便选一个根节点,然后把每条路径的lca求出来,吧路径存在lca上然后再按照dfs序的顺序处理,也就是说,我们处理一棵子树,必须把那些路径完全在这棵子树的处理完那么一条路径,最上只能放在lca的位置选择lca这个点覆盖他,所以我们把路径放在lca上枚举每个点他作为lca的所有路径,如果某条路径的两个端

2020-12-10 22:22:57 151

原创 gym/101741D. Elevator

https://codeforces.com/gym/101741/problem/D首先有简单的dp,dp[i]=min{max{dp[j-1],t[i]}+2*max{a[j]--a[i]}} ,然后发现这个怎么都要n^2,好像没撒能维护的数据结构然后要观察出一个性质,就是后面如果有比a[i]大的,当前这个一定跟后面那个更大的一起走,这个性质其实看下面化简了的dp式子也能看出来,这个性质有点像18桂林的Ahttps://blog.csdn.net/liufengwei1/article/deta

2020-12-10 21:42:14 140

原创 AtCoder Grand Contest 010 C - Cleaning

https://atcoder.jp/contests/agc010/tasks/agc010_c这题的关键是每个点向上的路径和儿子们自己匹配的路径可以解方程解出来啊没想到啊= =f[u]表示u向父节点的路径,pr为子树内部匹配的路径sum=所有子树向上的路径,其中有pr对自动配对了,f[u]+2*pr=sum,pr+f[u]=a[u]能凑出pr对来的充要条件是最大的那个f[v]*2<=sum然后要满足f[rt]=0,pr>=0,f[u]>=0,a[u]>=0

2020-12-10 00:50:21 139

原创 AtCoder Grand Contest 009 C - Division into Two

https://atcoder.jp/contests/agc009/tasks/agc009_c感觉这种题遇到过,就是一堆数字放两个集合,有多少种方法让集合内的差值都大于某个一个固定值一直都不会做,今天又见到了,但之前遇到的好像是两个集合相同的版本,这个是两个集合不同的固定值,所以两个集合本身也是不同的,也就是 {1},{}和{},{1}是有区别的不妨设A<=B设f[i]为前i个划分,s[i]在B集合的方案数假设f[i]可以由f[j]转移过来,也就是B集合中倒数两个数是s[],s

2020-12-08 21:39:29 132

原创 gym102155I  ≤  or  ≥ 

https://codeforces.com/gym/102155/problem/I我们令S=_\sum{3^k},然后找中位数可知左边右边就是S/2然后我们让某一边全都少了一层,就相当于/3那么减去的部分就是S/2*(2/3)=S/3,每次操作S就会变成2/3Sn=1e4,k=10的时候,50次刚好能让S<1,其实只要<=n就行了,因为3^0=1选4也可#include<bits/stdc++.h>using namespace std;typedef

2020-12-07 03:06:21 304

原创 C2. Errich-Tac-Toe (Hard Version)

https://codeforces.com/contest/1450/problem/C2这辈子都做不出阴间构造题.jpg这题关键想到用i+j...连续的横竖3个,他们的(i+j)也是连续的所以我们只要(i+j)%3中的0,1,2的某一个全部取反就行了,总有一个的数量是<=sum/3对于XO两个,我们就找出x,y,为了防止反转以后出现新的3连,所以x要保证不等于y我们知道最差情况就是Xsum/3,Xsum0/3+1,Xsum0/3+1或者Xsum/3,Xsum/3,Xsum/

2020-12-07 02:33:31 428

原创 codeforces1450D. Rating Compression

https://codeforces.com/contest/1450/problem/DD题做晚了啊草,C想了一年还是不会啊我们求出每个a[i]他作为最小值的范围l[i],r[i],我们令一段区间中最小值出现的为这段区间最小值出现的最左边或最右边,那么用单调栈左闭右开或者左开右闭就可以求得了len[i]=r[i]-l[i]+1,也就是说a[i]作为最小值出现时,长度最大是len[i],再大a[i]就被别人给消除了我们从大到小枚举ans[i]如果n-i+1这个数字没有,说明后面也一定都没

2020-12-07 01:52:26 1233

原创 gym102155A Ability Draft

https://codeforces.com/gym/102155/problem/A直接按顺序博弈搜索,维护一队减二队的值,每个人可能有两种选择,要么选当前大招中最大的,要么选普通技能中最大的,如果当前是一队的人就留返回值较大的,否则留返回值较小的由于每个人最多只有4个技能,一共只有10个人,那么其实选大招的不同的位置就只有4^10种可能,剩下的就是直接按顺序选大的#include<bits/stdc++.h>using namespace std; const int m

2020-12-06 20:48:39 312

原创 gym102441A Template for Search

https://codeforces.com/gym/102441/problem/Adp[i][j]表示i到j的模板形成一个回文串的最小长度,dp[i][j]=-1表示无法形成回文串如果s[i],s[j]可以配对,那么可以从dp[i+1][j-1]转移而来如果s[i]=='*',那么这个*可以复制[i+1,j]的一个后缀,由dp[i+1][k-1]转移而来s[j]=='*'同理记录一下转移,然后最后dfs去构造可行解#include<bits/stdc++.h>us

2020-12-06 01:51:10 253

原创 AtCoder Regular Contest 110 D - Binomial Coefficient is Fun

https://atcoder.jp/contests/arc110/tasks/arc110_dC(n+m,suma+n),suma+n只有4e6这个问题等价于要从B1中选出A1个,B2中选出A2个,....,Bn中选出An个,且这些简单的选出需要两两之间独立,才会是乘起来再考虑既然要这个乘积>0才会算进答案,那么必然B1>=A1,B2>=A2....那么我们就相当于选出suma+n个棒子,前A1个算坐第一个问题中的棒子,第a1+1个为分割棒,把第一个取出问题和第二个取出

2020-12-06 01:46:21 505

原创 codeforces1453E. Dog Snacks

https://codeforces.com/contest/1453/problem/E感觉E比D简单。。。流下了经典想不清期望的泪水.jpg观察发现如果当到了u,选择一个子节点v1,一定会把那棵子树v1吃光,才能穿过u去另一个子树v2dp[u]表示吃完u的子树,最后能停的最小深度然后对于每个不是1的根节点,他肯定要从某个儿子所在的子树的dp[v],跳到另一个儿子节点,那么这个距离最少就是dp[v]-dep[u]+1,每个这个跳的距离都更新一下ans然后1为根节点的时候特判一下,因为可

2020-12-05 00:14:25 452

原创 codeforces1453D Checkpoints

https://codeforces.com/contest/1453/problem/D研究了一年 1 0为啥期望是6。。。然后猜出了相邻两个1之间相差长度是m,期望是2^(m+1)-2,虽然不是很明白接下来贪心就可以了,m从大到小枚举,<=k的时候,就选尽量多的,因为都是2次幂加起来,只要k是偶数一定可以凑出来#include<bits/stdc++.h>using namespace std;typedef long long ll;const int ma

2020-12-05 00:11:11 152

空空如也

空空如也

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

TA关注的人

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