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]是谁获胜了都知道了,就是
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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

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

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

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

洛谷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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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表示上一个是什么符号最后
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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]右
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

洛谷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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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,
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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连在一起,从右到左横坐标只会不断变小
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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于是
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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

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

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];
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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 初始化,边界,自己训练
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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最后出现的位置,
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0

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,然后看
分类: 其他 发布时间: 10-29 16:45 阅读次数: 0