自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码笔记本

个人博客www.yyycode.cn

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

原创 F. 生命(菱形转矩阵+二维前缀和)

思路:模拟发现是菱形,转化到矩形,然后跑矩形的二位前缀和#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio>#include<algorithm>#define debug(a) c..

2021-02-28 15:41:44 213

原创 D. Round Subset(整除+dp)

https://www.luogu.com.cn/problem/CF837D思路:末尾为0的个数,乘0是不会产生贡献的。产生贡献的其实就是质因数分解2和5,且乘下来0的个数由min(sum2,sum5)决定。于是就成了暴力跑背包取0,5个数。空间不够。所以要滚动数组。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<

2021-02-28 15:11:00 228

原创 机器人(状压dp/贪心)

https://ac.nowcoder.com/acm/contest/9986/G思路:范围很小,爆搜超时,于是状压dp。当然如果范围大了是个贪心的操作#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstd

2021-02-28 12:32:18 154

原创 小G的LY数对(思维+异或性质+折半优化trick)

https://ac.nowcoder.com/acm/contest/11160/D思路:暴力枚举b中每一个数,枚举两位要用于修改的位置,然后将修改后的数在a中哈希查询是否存在相同数。O(30*30*n).很卡常,但是哈希换成手写卡过去了。但是还是要学习一下正解。所求可以表示成:x⊕y=(1<<i)⊕(1<<k);(i!=k)两边分别异或可以得到x⊕(1<<i)=y⊕(1<<k) (i!=k)如果提前先存下x^(1<<

2021-02-27 23:48:09 216

原创 bitset小用法

参考文章:https://blog.csdn.net/vocaloid01/article/details/82798450bitset<32> a(string("11111"));//注意是右对齐 bitset<2> b(string("10101"));//过长从头开始取 bitset<32> c(16);//保存进一个int的常用写法b.any() b中是否存在置为1的二进制位?b.none() b中不存在置为1的二进制位吗?b.co

2021-02-27 23:36:49 83

原创 模数的世界(同余性质+exgcd)

https://ac.nowcoder.com/acm/contest/9983/A思路:首先特判0,0,0;其次第一点: x%p==a <--->必存在(p-1)*k1%p==a.所以贪心上是(p-1)那问题就变成了构造q1,q2互质且他们(p-1)*q1%p==a&&(p-1)*p2%p==b然后将k1,k2给转化成式子。(p-1)*k1%p==a;(p-1)*k2%p==b;再将k1,k2写出表达式k1=t1p-ak2=t2.

2021-02-27 22:46:40 209

原创 九峰与分割序列(线段树维护dp+细节)

思路:dp[i][j],表示到i位置,i到前j长度的最大贡献。这样当然可以跑n^2暴力。但是这样就不转化成后面的优化了。如果暴力dp下长度维护需要优化,把长度的维转化成位置的维,然后跑dp的优化 for(LL i=1;i<=n;i++){ for(LL j=0;j<=i-k-1;j++){ //[i-k,i] dp[i][1]=max({dp[i][1],dp[j][0]+sum[i]-sum[j],dp[j][1]+sum[i]-su..

2021-02-27 22:20:50 159

原创 2021牛客寒假算法基础集训营6 网格(思维+线性dp)

https://ac.nowcoder.com/acm/contest/9986/E题意:有一个网格,每一个位置可以选上下左右四个方向的数,但是选了上就不能选下,选了左就不能选右。同时如果两个相邻的位置,如果其中一个方向选了右,一个选了左,互相选到了对方,就对答案产生w(a1^a2)的贡献其中w(x):x+popcnt(x).思路:其实可以发现一个位置选上下和左右是分割开的,可以分开统计出来。于是行列分开处理,对于每一列先转移出一个最优状态,累加到答案。然后再对每一行转移出一个最

2021-02-25 20:20:17 169

原创 2021牛客寒假算法基础集训营5 树上博弈(结合博弈状态的dp+有关树的状压dp)

思路:参考文章:https://blog.nowcoder.net/959548301qwq看到n≤20考虑状压dp。dp[s]表示当前点集为s,先手比后手高多少分。如果此时里面只有一个点的话,显然答案就是那个点的权值。否则的话枚举下一步操作是什么,假设选的点是i,dp[s∪{i}]的状态就可以由dp[s]来更新。就是一个顺推的dp思路,当前的s可以更新哪些状态。然后转移的权值是a[i]−dp[s]。这里就是博弈类型dp的一个思路。因为先手得到了ai​,之后后手的...

2021-02-25 17:16:20 143

原创 比武招亲(上)(思维+贡献法+组合数学隔板法详解)

https://ac.nowcoder.com/acm/contest/9985/B思路:首先贡献法考虑每个数作为最大值出现的次数和最小值出现的次数。那么最终答案其实是xi作为最大数-xj作为最小数,是很多个这样的差累加。那么把左边的被减数合成一块,右边的减数合成一块。答案就变成了每个最大数*其出现的次数-每个最小数*其出现的数。考虑1~n中挑一个x作为最大数。那么1~x-1就是作为剩下的。我要在剩下的1~x-1中挑出可重复的数字构成m个不递减的。公式为ccc(n+m-1,m);

2021-02-25 01:00:09 530

原创 2021牛客寒假算法基础集训营5-G模仿游戏(思维好题+贪心)

https://ac.nowcoder.com/acm/contest/9985/G思路:感觉官方题解看的比较晕,这里参考https://ac.nowcoder.com/profile/617771998大佬的思路。由于时间比较小且在2e5以内,那么我们其实可以考虑枚举时间,答案的最大值也就是2e5的范围。确定了枚举时间之后,考虑一下贪心的策略。由于妹妹只能在哥哥开了一种怪之后才能打,所以开始的话哥哥尽可能去开怪。当然这样的思路肯定是不完备的。所以还需要补充的就是,当哥哥在i时间结束

2021-02-24 23:53:53 160 3

原创 B.系数(mod意义下的系数转化+lucas)

https://ac.nowcoder.com/acm/contest/9986/B思路:mod意义下-2和1在mod3是一样的。转化成(x-1)^(2n).然后求系数就是高中的组合数基础题2n中选k个x,剩下的都给(-1)于是(-1)^(2n-k)C(2n k)由于n很大,不能预处理阶乘。但是p很小,于是预处理p,也就是lucas。组合数板子#include<iostream>#include<vector>#include<..

2021-02-24 21:18:24 220

原创 E. Paired Payment(多维最短路dijkstra)

https://codeforces.com/contest/1486/problem/E题意:给一张无向图,一次只能同时走两步,权值为两条边的边权和的平方。求1到其他每个点的最短距离。达不到就输出-1思路:拆点跑分层图也可以做。这里学习的是最短路dp的形式。原来的dijkstra最短路只更新最短距离,即dp[i]这道题需要在原来的基础上多加dp的状态,观察到这个边权很小,适合做dp的一维状态。即dp[i][j][num]:从起点到x,上一条边的权值为j,且已经经过了num条边,

2021-02-24 19:57:29 388

原创 D. Max Median(思维+二分中位数+前缀)

https://codeforces.com/contest/1486/problem/D题意:给你一个长度为n的序列。让你找到一个长度不小于k的连续子序列,使得它的中位数最大。一个长度为n的序列的中位数是排序后第⌊2n+1​⌋位置的值.思路:二分中位数,然后将>=mid的设为1,小于mid的设为0.然后看是否存在一段区间和>0的且其长度>=k.对于是否存在长度>=k且区间和>0怎么判断?预处理前缀和。然后枚举右端点i,如果前面[1,i-k]存在一个

2021-02-24 10:32:00 382

原创 美丽的路径(二分中位数+check by dfs)

https://ac.nowcoder.com/acm/contest/9985/A有n个点,m条边,每个点有一个全值。起点是s,终点是t,设美丽路径为s到t路程中第k/2+1小的数,求最大的美丽值是多少。思路:第k/2+1小的数,sort后其实就是中位数把。关于中位数的题一般是二分的trick。过一段时间我把二分中位数,二分平均值的题再补一下。然后题目的情况如果有两个连着的1,因为可以来回一直走这两个1,所以最后结果>mid-->l=mid;然后另外一种情况就是要使1的个数

2021-02-24 00:49:53 179 2

原创 石子游戏(思维+差分)

https://ac.nowcoder.com/acm/contest/9985/D题意:叶妹妹很喜欢玩石头,于是这天泽鸽鸽给她出了一道石子游戏,规则是这样的:有n堆石子排成一行,其中第i堆石子有ai​个,叶妹妹可以选择做无数次这种操作:每次操作把连续相邻的k个石子堆中的每堆石子数目加一,请问叶妹妹能否让每堆石子的数目都相同呢?叶妹妹觉得这题太简单了,于是丢给了聪明的你,快来解决这个问题吧!思路:一眼的差分题阿。但是边界搞糊涂了。再理解理解。差分就是表示每个数之间的差。那么对于此题就是要

2021-02-23 21:12:35 300

原创 C. Berry Jam(思维+差值前缀和+map预处理)

https://codeforces.com/problemset/problem/1278/C思路:由数量相等转化成一正一负和为0.然后用前缀处理其和值.并且map处理一半区间的和值出现的最优位置。最后再枚举另一半,找出其后缀与map对应位置的差。#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#inc

2021-02-23 16:06:44 174

原创 E. Cover it!(思维+二分图染色)

https://codeforces.com/problemset/problem/1176/E给你一张n个点m条边的无向连通图(没有边权)。保证图中没有重边和自环你的任务是选择至多⌊n/2​⌋个点使得对于任意一个没有被选择的点都和至少一个选中的点相邻(换言之,通过一条边连接)保证答案存在,如果有多个答案,输出任意一个你将要回答多个独立的询问思路:先取一个点A,那么和这点相邻的点(统称为B)就不需要取,然后和B相邻的点C们就要取。如此一来就转化成了二分图染色。最后看一下是哪种颜色满足&l

2021-02-23 14:57:08 143

原创 C. Reberland Linguistics(判定性dp+边界)

https://codeforces.com/contest/667/problem/C思路:从后往前枚举当前的决策可以转移,从2和3的长度选一个转移。dp[i][2]/[3]表示以i为起点,长度为2/3是否可以满足,转移从dp[i+x][2/3]找一个满足态。最后答案扔进set/vector去重自己写的比较冗余,学习了一下雨雨的(在下面)#include<iostream>#include<vector>#include<queue>#i

2021-02-23 13:52:07 177

原创 C. Serval and Parenthesis Sequence(思维+贪心)

https://codeforces.com/problemset/problem/1153/CNaCly_Fish 发明了括号序列,每个字符都是 '(' 或 ')'他很强,所以他给你一个只含 "(", ")", "?" 的串,你需要在问号处填写左括号或是右括号,使得 每个严格前缀(严格前缀 指不是整个串的所有前缀)不是可匹配的括号序列 整个串是可匹配的括号序列 可匹配的括号序列 的意思是 可以匹配的括号序列。你可以输出任意一种方案。你甚至可能找不到方案,这时输出 .

2021-02-23 00:04:19 236

原创 E. By Elevator or Stairs?(dp)

https://codeforces.com/problemset/problem/1249/E按照题意dp就好注意开始坐电梯的初始化是无穷大保证转移#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio

2021-02-22 22:54:39 146

原创 D. Program(思维+预处理前后缀最值/st/线段树)

https://codeforces.com/problemset/problem/1473/D给定一个长度为n的指令序列和初始变量x=0,仅包含+和−+表示让变量x+1,−表示让变量x−1然后进行m次操作,每次操作指令一个指令区间[l,r]忽略执行这个区间内的指令,其他指令照旧依次执行,输出每次操作后x的不同的数的个数。 例如+-- 变量x变成1,0,-1也就是有3中不同的变化。思路:连续值域波峰波谷的经过数字种类取决于最大值与最小值的差.也就是我们知道[1,l-1]和[r+1

2021-02-21 23:56:57 215

原创 A. GCD Table(思维)

https://codeforces.com/problemset/problem/582/A思路:如果暴力枚举是n^4,超时。首先可以知道的一定最大的那个数是对角线上的数。因此此时可以变成n^3,起码暴力可以过。然而知道了最大的,次大的也满足同样的性质,这时候再除去矩阵中最大和次大的gcd*2,剩下再次大的又是对角线上的元素。模拟一下就好了#include<iostream>#include<vector>#include<queue>#in

2021-02-21 21:13:29 285

原创 D - Nezzar and Board(思维+裴蜀定理)

https://codeforces.com/contest/1478/problem/D题意:有n个数,可以进行一种操作得到2x−y, 原数不会消失,问能否得到k.思路:没思路硬模拟(或者看到这个多个数构成..感觉像裴蜀定理2x−y可以看做x+(x−y),即该数与两数之差的和。用几组样例模拟一下,可以发现,无论进行多少次操作,始终都是ai​+∑{j,k}​(aj​−ak​),也就是在若干组差值加上一个值。这样的话就是要n^2枚举差值了。但是还有个性质。a2-a1已知,a3-a2已.

2021-02-21 18:42:21 259

原创 F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)

https://ac.nowcoder.com/acm/contest/9984/F参考:F 魏迟燕的自走棋(贪心+并查集)将每个人看成一个点,武器的能力值抽象成边,这样就转化成图论的模型了。然后可以转化成联通块去看这种点之间连边的最值维护似乎跟并查集维护联通块容易联系到一起(应该是个trickC. Bertown Subway(思维+贪心+并查集维护联通块)从联通块角度去看,如果一个联通块还没有形成环,那么他们之间的武器是可以互相换的,即他们当中的任意点都可以拥有新武器,我们称这个

2021-02-21 13:42:27 217 1

原创 九峰与子序列(计数dp+字符串哈希)

https://ac.nowcoder.com/acm/contest/9984/E题意:给定长度为n的字符串序列a和字符串k,询问a有多少子序列拼接起来等于k。思路:n<=20,直接爆搜,但是如果是40,那就折半枚举。不过这里用的是dp的方法。dp[i][j]:到了第i个数,且能拼成前j长度的有多少个方案。dp[i][j]+=(dp[i-1][j-len[i])) [ if(cal(j-len[i]+1,j))==val[i] ]然后一个mle的提醒:开滚动,01

2021-02-21 13:11:08 163

原创 C. Bertown Subway(思维+贪心+并查集维护联通块)

https://codeforces.com/contest/884/problem/C题意:给你1-n的一个排列a,你从某一个位置a[i]可以到达a[a[i]],我们定义便利度为令i和j都从1-n,从i能到达j的pair的对数(也包括i到i)。 市长想要改变这个排列使得它的便利度最大,但是他最多只能改变两个数字,并且改变完之后的排列也必须是1-n不重复的。求能得到的最大便利值。思路:其实就是开始的图就是各个联通块,想让最后答案最大,肯定让某两个大的联通块合并,再On算一下最后的答案。合并连

2021-02-20 23:13:37 226 1

原创 D. Boxes And Balls(思维+k叉哈夫曼树贪心)

https://codeforces.com/contest/884/problem/D题意:给定一个n。然后是n个不同颜色的球的数目。开始这些球都在第一个盒子里。你有下面的操作方法① 把某一个不空盒子种的球拿出来。② 把这些球按颜色装到3个或者2个盒子里,不同颜色可以装在一起。而每次这种操作的花费为 你第一个操作拿出的球的数目。问你如何操作,能够使花费最小。思路:正着想比较难,倒着想就是把很多球合并回第一堆的过程。其合并的过程就是一颗树。那么如果是每次两堆,那就是合并果.

2021-02-20 23:02:12 143

原创 武辰延的字符串(思维+二分字符串前缀)

众所周知,武辰延很喜欢字符串。这天,他对着两个字符串 s 和 t 发呆,他发现这两个串的前缀有很多相似的地方,s 的两个前缀连接起来竟也是 t 的前缀。武辰延想知道有多少对 s 的非空前缀连接起来是 t 的前缀。形式化地讲,我们把si​看作字符串 s 长度为 i 的前缀。对于一对前缀 (si​,sj​)(允许 i=j)而言,当满足si+sj​=ti+j​时,我们认为这两个 s 的前缀拼接后等于 t 的一个前缀。两对 s 的前缀 (si​,sj​)与 (si′​,sj′​)不同当且仅当 i...

2021-02-20 00:50:16 192 1

原创 九峰与蛇形填数(思维+标记)

https://ac.nowcoder.com/acm/contest/9984/G思路:如果每次带修的话就复杂度很大。有没有办法优化呢?只要一次知道最终的结果就好了。这题方法很多,也可以线段树维护每行来得到最终结果来做。常数小的办法就是倒序。从后面开始覆盖,因为答案一定是最后被修改的,然后覆盖了就标记当前矩阵到的最远的列范围。其他矩阵碰到这条边的时候j循环自动跳到后面。应该近乎O(n^2)#include<iostream>#include<vector&

2021-02-19 23:33:47 221 1

原创 吴楚月的表达式(dfs+维护运算同优先级块)

https://ac.nowcoder.com/acm/contest/9984/H思路:虽然上了数据结构课的第一眼可能是要用个栈...(栈也确实能做刚开始想的时候就dp[i]维护到i这个节点的答案,然后dfs跑一遍,发现有前一个符号的加减关系,于是开一个lastop,dfs传一个父亲的字符。但是还不行。因为比如1+2*3/4*5。dp[4]这个答案是不能用于转移的,答案要分割成+号前面的一个块和5前面的联通块。比赛的时候想错了,以为暴力往上跳是O(n)级别的。但是实际上是在一根树链

2021-02-19 21:49:14 257

原创 C2. Guessing the Greatest (hard version)(思维+二分+细节的坑)

https://codeforces.com/contest/1486/problem/C2思路倒是不难想阿。上次的教训一看就是个二分把。一般的二分没包括mid,这题需要包括mid。每次包括mid之后看第二大值的问题有没有变。然后就可以二分了。C1可能变区间mid去做,c2的话其实发现每次都带着最开始问的不变的第二大pos和l,r去比较。但是有个坑。我比赛的时候一直wa1,赛后也一直wa2.就是[l,l][r,r]是不能出现的所以开始的时候有个边界。下面代码中的注释中有写虽然

2021-02-19 20:57:01 318 6

原创 B. Eastern Exhibition(二维中位数)

https://codeforces.com/contest/1486/problem/B思路:一维中位数(数轴)奇数的时候只有中间的元素。偶数的时候中间两个之间的数都可以取。二维分成x,y分别sort后取一维中位数,算交叉面积#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map

2021-02-19 12:06:57 375 1

原创 A. Alyona and mex(取mod构造)

https://codeforces.com/problemset/problem/739/A思路:大的区间的mex要满足,里面其他小的区间mex要先满足,于是答案取决于最小的区间长度。至于怎么输出方案,如果暴力n^2超时,其他结合数据结构感觉也不是很好处理。但是可以构造。每次输出i%最小长度,这样可以保证每个[li​,ri​]的区间都包含[0,ri​−li​]#include<iostream>#include<vector>#include<...

2021-02-18 21:23:38 202 2

原创 F. Graph Without Long Directed Paths(思维+二分图染色构造)

https://codeforces.com/problemset/problem/1144/F思路:构造没有连续两条边相同方向的图(二分图染色)#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include<cstdio&g

2021-02-18 20:08:29 92

原创 C. Trailing Loves (or L‘oeufs?)(思维+(1~n)或n!质因子分解)

https://codeforces.com/problemset/problem/1114/C题意:求 n转化为 b 进制下末尾有多少个 0.思路:一个数在b进制的末尾有多少个0呢.从b的大次幂往小次幂看哪次能整除,那么有多少个0。怎么理解呢?一个数对于p进制的一位能整除,实际上就是该位,比如该位p^4,那么该位上的数就是x/(p^4),数超过了p就往前进位。比如:100010(2) = 34(10) = 2 × 17是二的一次方的倍数1100(2) = 12(10) = 4 ×

2021-02-18 18:11:11 139

原创 C. Ladder(思维+最值区间前缀)

https://codeforces.com/contest/279/problem/C题意:给一个数列,查询区间[l,r]内是否存在b1 ≤ b2 ≤ ... ≤ bx ≥ bx + 1 ≥ bx + 2... ≥ bk或是非递增、非递减序列思路:按照波峰的状态,预处理出每个点能往右达到的最远点/长度,每个点能往左达到的最远点/长度。然后判[l,r]的区间长度是否满足r[l]+l[r]#include<iostream>#include<vector>.

2021-02-18 16:00:00 229

原创 C. Arithmetic Progression(细节模拟)

https://codeforces.com/problemset/problem/382/C题意:给定一个序列,问是否可以通过只插入一个数来使得整个序列成为等差数列,求出总共有多少可能的情况,并输出这些数。思路:模拟一下发现只有几种情况..然后要考虑各种细节。其中一个是两个不同的差出现次数相等的时候要用大的差,同时要注意大的差能被2整除且/2后等于小的差#include<iostream>#include<vector>#include<queue&

2021-02-18 13:55:57 349

原创 D. Ceil Divisions(思维+根号构造)

https://codeforces.com/problemset/problem/1469/D思路:直接一个个用大的去除最后不满足n+5.再用大的除的过程中当碰到i*i<=n的时候,就可以将n也减少一次,而前面的数也依然可以1次变1.2e5的sqrt够了#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath&gt

2021-02-18 00:22:10 206

原创 E. New Reform(dfs判环/并查集判环)

https://codeforces.com/problemset/problem/659/E思路:构造发现如果没有环,让一个点牺牲最大,剩下全部能到;如果有环就没有牺牲#include<iostream>#include<vector>#include<queue>#include<cstring>#include<cmath>#include<map>#include<set>#include

2021-02-17 22:50:58 175

空空如也

空空如也

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

TA关注的人

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