自定义博客皮肤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)
  • 收藏
  • 关注

原创 gym102769B. Bounding Wall ccpc2020秦皇岛

https://codeforces.com/gym/102769/problem/B写完到调试到对拍出来前前后后用了6个小时,写这种大模拟还是功力不够。。。现场感觉是不可能写出来的,现场也只有pku和渡渡鸟过了这题思路挺简单的,就枚举这个点在分别的左右上下边界上大致讲一下在左边界上怎么求最大的矩形首先l[i][j]表示i能连续最左边到哪,也就是最小的j,r[i][j]为最优边,u[i][j]为最上边也就是最小的x,d[i][j]最下边然后先求出上边最高可以到哪,由于(x,y)在左边界,

2020-10-30 22:51:52 235

原创 gym102759D Just Meeting XXI Open Cup. Grand Prix of Korea

https://codeforces.com/gym/102759/problem/D自闭场,4题跑路,五点共圆和uestc7题也太猛了由于要满足不存在一个3元环中,一条边同时小于另外两条边,那么对于u-v这条边,如果u-w,w-v只有一边存在,那么另一边可以任意变的边就等于这两条边的较小值,如果两条边都不存在,就直接2条1就行了然后可以发现对于同一个联通分量两个点之间的边一定是确定的,且对于这个联通分量的最大或最小生成树,那些还无法确定的边等于这棵树上两个点路径上最小的那条边最优,而对于那些.

2020-10-29 20:32:22 637

原创 E. 矩阵 2020计蒜之道决赛

https://nanti.jisuanke.com/t/49109学习自https://www.cnblogs.com/BOZHAO/p/13880947.html求最大全1子矩阵可以左开右开这样对应高度找最大宽度但是有时候涉及全1子矩阵中间的计数,需要左开右闭,即左边严格小于,右边<=这题我们统计以第i行为底边,必须经过(i,j)这个点的满足的矩阵数对于最高高度为h[j],左边界为l[j],右边界为r[j],首先我们可以得到(r[j]-l[j]+1)*h[j]这一整个矩阵中所有

2020-10-29 00:57:04 117

原创 codeforces1434C. Solo mid Oracle

https://codeforces.com/contest/1434/problem/Cvp的时候没写出来,写了一年= =,看了下前面人的代码,发现可以巨简单的直接计算。。。经典计算题搞不清楚首先如果a>b*c的话,也就是一次伤害比回血多,那么就无限血也可以击杀了否则如果c<=d,也就是在回血结束之后,才能放新的技能,由于a<=b*c,可知从第二次放技能开始肯定没第一次放技能血量低,那么答案就直接是a那么我们可以计算出当释放k=a/b/d+1次技能时,血量会达到最小值

2020-10-28 20:50:18 205

原创 codeforces1434B. Shurikens

https://codeforces.com/contest/1434/problem/B直接用栈模拟,并记录一个最大的最小值,表示当前栈中每个元素都大于这个最大的最小值,如果栈顶一个元素出队,就把这个最小值给新的栈顶更新一下。由于最大的最小值是不断增大的,而且每次操作是取出当前所有元素的最小值,所以这样模拟是肯定能找到答案,不然就无解的。#include<bits/stdc++.h>using namespace std;typedef long long ll;const

2020-10-28 20:34:41 143

原创 codeforces1434A Perform Easily

https://codeforces.com/contest/1434/problem/A直接把每个音在6个弦上的位置全部丢进数组,然后按位置排个序然后从左到右枚举左端点,维护右端点r,是的[i,r]中间包含每个音,然后更新一下ans=max{c[r].val-c[i].val}#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=3e5+10;int n,m,cnt

2020-10-28 20:31:45 136

原创 G Tree Projection 2020ICPC·小米 网络选拔赛第一场

https://ac.nowcoder.com/acm/contest/7501/G把b中的数字变成对应a中数字的哪一个位置,dy[a[i]]=i,b[i]=dy[b[i]]然后从前往后枚举b[i],每次b[i]与之前出现最小的b[j]相连因为b[i]是dfs序,且从左到右枚举b[i],那么这棵树从b[1]开始是满足dfs序的又因为每次与之前出现最小的b[j]相连,且b[j]是原b[j]数字出现在a数组中的位置,越小越靠前,那么一定是b[i]=1也就是原b[i]=a[1]的地方为根节点,从上

2020-10-28 11:15:14 145

原创 codeforces1437C. Chef Monocarp

https://codeforces.com/contest/1437/problem/C这题好像比D题难一点,D题偏水了。。由于有n个菜,而且他们最好的时间ti<=n,那么可想而知就算从n开始拿出盘子,最多到2*n的时间可以拿完所以dp[i][j]表示前i个时间已经拿出了j个菜的最小代价,扫过去更新就行了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=3

2020-10-28 01:04:23 1045

原创 codeforces1437E. Make It Increasing

https://codeforces.com/contest/1437/problem/E看清楚是严格递增序列那么无解的情况就是相邻两个差得太少的情况,必须满足a[b[i]]-a[b[i-1]]>=b[i]-b[i-1]才行然后对每两段中间,如果跟左右限制a[b[i]]和a[b[i+1]]差得太少不行,直接ans++否则则搞一个最不下降子序列,由于是要严格递增,我们就给每个地方变成c[j]=a[j]-a[b[i]]-(j-b[i]),这样把按下标至少严格递增1也考虑进去了,那么搞个最长

2020-10-28 01:01:49 275

原创 codeforces1437G Death DBMS

https://codeforces.com/contest/1437/problem/G要找一个串是另一个串的子串,直接把所有名字建一个ac自动机,在它们的末尾节点搞个multiset存他们的值然后修改就直接找到那个人的名字在ac自动机上的末尾节点修改multiset查询就直接对着查询串跑一遍,暴跳fail链(这样据说一次是sqrt(n)的?),沿路记录multiset中最大值#include<bits/stdc++.h>using namespace std;typed

2020-10-28 00:54:34 253

原创 C 攀登山峰 2020计蒜之道决赛

https://nanti.jisuanke.com/t/49111没想到这个t<=20怎么用。。。因为t<=20,那么l,r这一区间最多只有t个位置能够数量>=v=(r-l+1)/t+1,也就是说直接上主席树,如果当前区间的数字总数<v就直接return,那么每次查询就最多向下跑t条链,复杂度是O(Mtlogn)的#include<bits/stdc++.h>using namespace std;const int maxl=1e5+10;in

2020-10-27 21:59:59 196

原创 E Phone Network 2020ICPC·小米 网络选拔赛第一场

https://ac.nowcoder.com/acm/contest/7501/E看了看题解没太看懂怎么维护最小值的,学习了一下杭二oi爷的代码学会了按数字1-m的顺序求答案,因为求数字i的时候必须1-i-1都要出现过,所以求当前数字直接在之前的基础之上维护就行了我们维护从每个位置开始,1-i都出现过的最小右端点位置Ri,l,跟题解里面定义是一样的,按从左到右顺序枚举数字的位置,我们就是需要吧[last+1,id]这一段中小于id的更新为id,用树状数组维护前缀最大值,每个Ri,l等于prem

2020-10-27 20:08:07 198

原创 F Design Problemset 2020小米邀请赛第1场

https://ac.nowcoder.com/acm/contest/7501/F思想出问题了,这题应该秒的,跟19沈阳那个贪心有点像二分答案,然后每种题目先把l[i]全部放进每个题集,如果某一种题目不够放就不行,如果每个题集的总数已经大于R了,就直接不行,在L,R中间就直接可以了,不够L就需要贪心地放剩下的对于每种题目还剩下b[i]种,那么由于每个题集的题目必须在l[i],r[i]之间,由于已经全部放了l[i]个了,不够的最多只能放(r[i]-l[i])*mid,跟b[i]取个min,然后看

2020-10-25 23:09:46 258

原创 codeforces1436 E. Complicated Computations

https://codeforces.com/contest/1436/problem/E直接用权值树状数组暴力模拟就好了,想了一年想不出来树状数组b[i]记录值为i上次出现的位置在哪,getmi求前缀最小位置在哪里然后枚举右端点,不断地更新最小位置,一开始b[i]初值全部设成n+1然后考虑直接右端点就是n,每个数字上次出现的位置就是他最后出现的位置如果对于某个数字i,last[i]!=n && getmi(i-1)>last[i],也就是从末尾到i最后出现的位置,

2020-10-25 02:15:12 511

原创 L. Xian Xiang 2019ICPC银川现场赛

https://nanti.jisuanke.com/t/42392注意到n=18,于是可以快乐2^n*n*n dp一开始用dfs去给同时消除第i个和第j个的所有合法状态加入他的vector中,然后遍历所有状态枚举vector转移,dfs常数太大超时了2s都跑不过然后用个2进制mask来记录一下哪些是冲突的,然后在转移的时候&一下看能不能转,就322ms过了然后又是经典num[i][j]=0没有初始化,找一年错艹,每次队友交题我都提醒long long 初始化,边界,自己训练

2020-10-24 00:26:41 222

原创 codeforces1430E String Reversal

https://codeforces.com/contest/1430/problem/E可以很容易求出反串中每个位置需要是原串中哪个位置的字母然后求个逆序对就是需要交换的次数我思想出问题了,想了一年#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=3e5+10;int n,m,cnt,tot,cas;ll ans;int now[26],b[maxl];

2020-10-23 19:55:34 150

原创 H. Delivery Route 2019 ICPC现场赛 并查集+dijstra

https://nanti.jisuanke.com/t/42388尝试写了一下spfa没加优化跑不过去,据说加了优化能过?艹这题也巨水去年没时间写了由于它说了如果存在单向边从u->v,那么一定无法从v->u,而由于只有单向边有负数,所以对于每一个双向边连起来的连通块内部,是不存在单向边的,那么单向边总是从一个连通块连向另一个连通块,于是就可以按照单向边来拓扑排序先把当前rudu为0的连通块拿出来用双向边跑一遍dij,然后用单向边去更新别的连通块中的点的最小dis,接着拓扑排序一

2020-10-23 01:25:06 163

原创 F. Function! 2019ICPC银川现场赛

https://nanti.jisuanke.com/t/42386byf当时没写出来这题情有可原,我也快写了40分钟。。。留下了数学功底薄弱的泪水观察发现f^-1_{b}_(a)始终为1然后考虑前面的部分为1*(a^2-a)+2*(a^3-a^2)+...d*(n-a^d),这个东西化简一下就是d*n+d-a^d-a^(d-1)-...-a^2-ad可以logn求,前面部分可以直接算,后面部分就是个等比数列求和然后我们发现当a>sqrt(n)的时候,后面那个式子全是1于是

2020-10-22 20:36:25 156

原创 K. Largest Common Submatrix 2019ICPC银川现场赛

https://nanti.jisuanke.com/t/42391去年思想出问题了这题没做出来我吐了当时没注意到两个矩阵的数字都是1-n*m的排列,注意到这个那么相同的子矩阵就是对应数字的横坐标和纵坐标的差值相同就行了然后就是个傻逼最大全零子矩阵#include<bits/stdc++.h>using namespace std;const int maxl=1010;int n,m,top,ans;int h[maxl],s[maxl],l[maxl],r[ma

2020-10-22 18:12:57 157

原创 codeforces1428D. Bouncing Boomerangs

https://codeforces.com/contest/1428/problem/D这题写到2小时多才过。。。观察发现从左到右,a[j]=3的右边的列可以是a[j]=3,2,1,然而a[j]=2右边的列必须是a[j]=1,a[j]=1时碰撞的那个target右边必没有再一个target。从左到右非常难写,写了半天也绕不清然后发现从右到左非常好写。。。对于a[j]=1时,可知他右边没有多的target,我们必须新开一行。又因为如果有多个a[j]=3连在一起,从右到左横坐标只会不断变小

2020-10-21 22:12:00 136

原创 codeforces1428E Carrots for Rabbits

https://codeforces.com/contest/1428/problem/E一打开榜发现E比D过得还多,就果断先写E可以发现一个胡萝卜如果要分为num[i]段,那么肯定是平均更好,就可以轻松算出来a[i]分成Num[i]段的最小的平方和然后我们就贪心地去选择选择哪一个胡萝卜从分成num[i]段变成num[i]+1段,他能减少的代价最大就行了#include<bits/stdc++.h>using namespace std;typedef long long

2020-10-21 22:02:07 245

原创 codeforces1428F Fruit Sequences

https://codeforces.com/contest/1428/problem/Fvp的时候没想出来。。。主要D想太久了,其实F也不太会这题的关键是想到对于一个确定的r,l越左高度f(l,r)越高于是就能想到每次r向右拓展一格,如果是1个新的1,那么左边就有一部分要全增加1于是一个很简单想法就是在线段树上二分找到覆盖到哪里,然后区间覆盖,然后求个前缀和就是这个当前r对应的所有f(l,r)之和然而这样十分难写于是我们发现每次增加只增加1,且我们可以考虑对当前末尾最长的连续的1,

2020-10-21 21:59:07 239

原创 codeforces1433E Two Round Dances

https://codeforces.com/contest/1433/problem/E#C(n,n/2)然后互相交换所以要除2,分出来后内部全排列是(n/2)!,由于可以shift,所以以哪个为开头都一样,一共就有n/2种为开头的选择,所以一个round就是(n/2-1)!,两个可以互相组合,所以ans=C(n,n/2)*(n/2-1)!*(n/2-1)!/2#include<bits/stdc++.h>using namespace std;typedef long lo

2020-10-21 00:37:46 274

原创 codeforces1433F Zero Remainder Sum

https://codeforces.com/contest/1433/problem/F用dp[i][j]表示前i行,sum%kp==j的最大值是多少然后发现每一层可以说是独立的,所以对于每一行,f[j][l][k]表示前j列已经选了l个sum%kp==k的最大值是多少每一行跑完以后再选出对于这一行的每个k最大的f[m][l][k](l=0->m/2)是多少,再用这个mx去从上一行dp[i-1][tk]更新这一行dp[i][(tk+k)%kp]#include<bits/st

2020-10-21 00:37:42 519

原创 codeforces1433G Reducing Delivery Cost

https://codeforces.com/contest/1433/problem/G998ms卡过去了。。。n^3floyed跑出来每个点到另一个点的答案然后枚举删除每条边,再枚举每个route,可以O(1)找到此时这个route的最小代价,加起来得到删掉这条边的答案,复杂度为O(mk)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=1010;const

2020-10-21 00:37:38 235 3

原创 洛谷P4074 [WC2013]糖果公园

https://www.luogu.com.cn/problem/P4074树上离线带修改的莫队板题把这两题混了一下https://blog.csdn.net/liufengwei1/article/details/109153421https://blog.csdn.net/liufengwei1/article/details/109173023(其实还可以改成求个区间最大值套个回滚莫队#include<bits/stdc++.h>using namespace

2020-10-20 20:51:02 118

原创 SP10707 COT2 - Count on a tree II 树上莫队

https://www.luogu.com.cn/problem/SP10707欧拉序就是进去的时候标记一次出来的时候标记一次,然后我们把这个序列拿出来,变成一个2*n的新序列,每个点有前后两次访问ll[i]和rr[i],那么一段树上的路径就可以用区间表示假设询问是u,v的路径,ll[u]<ll[v],如果u是v的祖先,那么直接对应到ll[u]-ll[v],否则对应到rr[u]-ll[v]再加上ll[lca(u,v)],因为u和v的最近公共祖先出现一定在ll[u]左边,第二次出现在rr[v]右

2020-10-20 01:05:14 115

原创 codeforces1421 E Swedish Heroes

https://codeforces.com/contest/1421/problem/E我们发现无论怎样变换,其实每个数字a[i]给最后结果的贡献要么是a[i],要么是-a[i]然后找找规律可以发现(n+[-1数量])%3==1注意第二个样例的情况,那就是由于你第一次必是吧相邻的两个数字同时-1,你之后怎么变,都会存在相邻两个相同的情况所以我们用dp[i][j][k][l]表示前i位,(n+[-1]数量)%3==j,k=1表示已经有相邻两个相同了,k=0反之,l表示上一个是什么符号最后

2020-10-19 23:27:53 392 1

原创 洛谷P1903 [国家集训队]数颜色 / 维护队列 带修改莫队

https://www.luogu.com.cn/problem/P1903离线修改的莫队可以多增加一维的时间,然后变成[l,r,t]->[l+-1,r+-1,t+-1]先按左端点块排序,再按右端点块排序,再按时间大小排序。块的大小需要是n^(2/3),可以吧总复杂度变成O(n^(5/3)),优于n^2实际上在1e5的数据下洛谷最大的点只跑了846ms,还没加读入优化#include<bits/stdc++.h>using namespace std;const

2020-10-19 01:27:33 146

原创 atcoder2014 joi训练营 C 歴史の研究 回滚莫队

https://atcoder.jp/contests/joisc2014/tasks/joisc2014_c经典找最大值,删除的时候找次大找不了,所以我们需要用不删除的回滚莫队,每次操作都从左端点所在块的最右边开始向左移动到左端点然后再回退,由于同一左端点块内右端点都是严格向右的,所以一个块只会向右n,只有sqrt(n)个块,每个询问只要扫左端点块一遍,长度为sqrt(n),所以左端点移动总数是qsqrt(n)#include<bits/stdc++.h>using namespa

2020-10-18 23:30:36 162

原创 洛谷P5906 【模板】回滚莫队&不删除莫队

https://www.luogu.com.cn/problem/P5906莫队好多套路啊。。。建议都学习一下学习自题解https://www.luogu.com.cn/problem/solution/P5906回滚莫队的意思大概就是,按l所在块再求枚举询问,相同的一起求答案,l部分的必须每次从当前块的最右边向左拓展到想要的地方,求完当前询问之后,你此时更新出的答案要回滚到l向左移动之前,再求下个询问。左端点在一个块中的询问处理完之后,我们清空所有最左和最右的数字位置的数组,再处理下个块中

2020-10-17 01:52:05 260

原创 gym102220 Mini-game Before Contest

https://codeforces.com/gym/102220/problem/F在vj跟着现场榜打的,没人开这题,水题啊卧槽,一直在想A题,A题难得一比卧槽,省赛还是要多开题,cf上gym牛逼网友F过了一车。虽然我当时看了这题但是因为没人过所以没有花很多时间想,晚上仔细想想一写就过了用-1表示平局,0表示A获胜,1表示B获胜,b[i]=0/1表示他实际是希望谁赢的,dp[i][j]表示到了第i个点现在是第j个人移动时的状态从没有出度的点开始,此时dp[i][1-6]是谁获胜了都知道了,就是

2020-10-16 02:01:29 276

原创 hdu6854 Kcats 2020hdu多校7

http://acm.hdu.edu.cn/showproblem.php?pid=6854好DP

2020-10-15 01:04:56 313

原创 codeforces1175F The Number of Subpermutations

https://codeforces.com/problemset/problem/1175/F艹,还能这么玩?由于我们需要一段序列包含1-r-l+1,直接1-n随机一个ull数字b[i]然后一段区间要是出现了子全排列,那么这段区间异或之和就是b[i]异或之和(加法之和应该也可以)然后我们只要枚举每个1的两边,假设最大数字再右边(之后反着再来一遍),看一下r-mx+1这段区间是不是子全排列就行了这题分治怎么做啊。。。不会啊。。。#include<bits/stdc++.h&g

2020-10-13 23:43:18 252

原创 gym102391I Minimum Diameter Spanning Tree 带权最小直径生成树

https://codeforces.com/gym/102391/problem/I学习自https://blog.csdn.net/crazy_ac/article/details/8816877板题做了一个下午,头快想烂了首先找到图的绝对中心,然后由于边权不为1,所以把所有边权都*2,然后中心到其他点的距离也会是整数了,确定中心后就从u,v开始跑,记得dis[u],dis[v]要设为真正的初始值。#include<bits/stdc++.h>using namespac

2020-10-13 01:50:22 438

原创 2019ICPC沈阳现场赛 E Capture Stars 圆的反演

https://ac.nowcoder.com/acm/contest/7830/D感觉沈阳的惨败都是上个世纪的事情了。。。刚好牛客国庆集训3把沈阳的题放出来了,拿出来补补,就是个圆的反演水题,当时很多队很早就过了,然而最后也就那么多人过,因为2018-2019年的各种比赛题目中没出现过这题就拿(0,0),半径为2*R当反演圆,然后两个过切点的圆反演过去就是两条直线,吧所有点反演过去就是直线之间的点,因为望远镜的区域跟原来的大圆小圆相切并夹在中间,反演过去就也是夹在中间相切的,半径就知道了,横坐标也

2020-10-11 01:28:58 272

原创 hdu6046 hash 2017多校2

http://acm.hdu.edu.cn/showproblem.php?pid=6046又是18徐州第一题,所有数字都不同,又不会用这个性质我吐了因为给出的函数是完全随机,所以所有数字排列都完全随机,而2^64-1刚好是ull,那么我们可以认为任意不同位置的8*8的矩阵的数字排列也是完全不同的,我们就可以隔980就搞个8*8的矩阵把他记录下来存进map,由于任意一个1000*1000的矩阵中任意两个8*8矩阵之间最多差984,那么这其中必有一个我们之前存了的8*8的矩阵,直接枚举所有的找到一个就

2020-10-10 22:22:33 131

原创 hdu6052 To my boyfriend 2017多校2

http://acm.hdu.edu.cn/showproblem.php?pid=6052我太菜了.jpg,比赛的时候没做出来这种统计肯定是按数字来统计的,但我没想清楚怎么去重其实只要考虑每个数字是多少个矩阵最上面一行最左边就行了由于我们先优先最上面一行,所以下面肯定就随便算了,那么向下拓展的down始终为n-i+1然后我们再从下向上枚举每一行有多少向左l和向右r,乘起来再乘以down就行了首先在当前行他肯定是最左的一个,那么r=m-i+1,l就是到上一个+1的地方然后枚举他上

2020-10-10 19:13:46 1852

原创 Wood Processing 2019牛客多校 wqs二分

https://ac.nowcoder.com/acm/contest/890/J当年队友过的,斜率优化部分很水,然而据说可以wqs二分优化掉一维,回来补一补nk的斜率优化DP没什么好说的,直接每次多一段,显然我们可以按照高度从低到高或者从高到低排序,这样肯定是最优的这题nk可以过的,然而如果n=1e5,k=1e5的时候,就必须要wqs二分优化掉一维了,我们给每多出一段加上一个代价mid,显然这个代价越大,最后分段就越少,那么我们去找到恰好分k段的时候答案就是dp[n]-mid*k但是wqs

2020-10-07 23:14:02 240

原创 gym101669B Bricks SEERC2017

https://codeforces.com/gym/101669即使DP式子再短,我还是想不到.jpg这题关键想到是要枚举空位,f[i]为前i中的所有球已经放好了,且第i个为空格的方案数是多少设s[i]为前i位的球的数量,那么前i位的空格总数就是i-s[i]了由于M<=N,我们把n++,保证在n+1的位置处至少有一个空格,在那里统计算出答案。只有每次s[i]==s[i-1]的时候,说明这里没有球直接下落,他可以作为一个空位,只有i-1-s[i-1]>=0时,f[i]才能有一个

2020-10-07 02:04:17 230

空空如也

空空如也

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

TA关注的人

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