CF刷题计划
issue是fw
19 years old, struggling in life, chasing daydreams.
展开
-
C. Harmony Analysis(构造,递推)
直接想会非常棘手考虑从2n−1维空间递推到2n维空间考虑从2^{n-1}维空间递推到2^n维空间考虑从2n−1维空间递推到2n维空间把2n−1维空间构造得向量看成一个矩阵把2^{n-1}维空间构造得向量看成一个矩阵把2n−1维空间构造得向量看成一个矩阵那么2n维空间的合法构造就是左上,右上,左下都放2n−1维的矩阵那么2^n维空间的合法构造就是左上,右上,左下都放2^{n-1}维的矩阵那么2n维空间的合法构造就是左上,右上,左下都放2n−1维的矩阵右下放2n−1维的矩阵的相反数右下放2^{n-1}维原创 2020-07-30 13:55:06 · 310 阅读 · 0 评论 -
A. XOR Equation(dfs大法好哇)
注意到x和s最大才40位二进制注意到x和s最大才40位二进制注意到x和s最大才40位二进制想到了什么?爆搜!!\color{Red}想到了什么?爆搜!!想到了什么?爆搜!!从第40位二进制开始爆搜从第40位二进制开始爆搜从第40位二进制开始爆搜当x的这一位是1,说明两个数字二进制在这位有且仅有一个是1\color{orange}当x的这一位是1,说明两个数字二进制在这位有且仅有一个是1当x的这一位是1,说明两个数字二进制在这位有且仅有一个是1所以这里方案数乘上2,和加上这一位二进制继续往下搜所以这里原创 2020-07-30 09:52:32 · 268 阅读 · 0 评论 -
D. Jerry‘s Protest(期望,暴力)
做的方法就很暴力令dp[i]表示在胜利的情况下,多i分的概率是多少令dp[i]表示在胜利的情况下,多i分的概率是多少令dp[i]表示在胜利的情况下,多i分的概率是多少由于获胜的情况是n∗(n−1)/2种,所以由于获胜的情况是n*(n-1)/2种,所以由于获胜的情况是n∗(n−1)/2种,所以double xi=1.0/(n*(n-1)/2),ans=0;for(int i=1;i<=n;i++)for(int j=1;j<i;j++) dp[ a[i]-a[j] ]+=xi;然后原创 2020-07-29 20:31:25 · 289 阅读 · 0 评论 -
C. Not Equal on a Segment(ST表查询)
有俩种方法Ⅰ.查询区间的最大最小值\color{Red}Ⅰ.查询区间的最大最小值Ⅰ.查询区间的最大最小值若最大最小值相等且等于询问数字,输出−1若最大最小值相等且等于询问数字,输出-1若最大最小值相等且等于询问数字,输出−1否则挑一个不等的下标输出否则挑一个不等的下标输出否则挑一个不等的下标输出我用的是ST表,当然你也可以用线段树啥啥的我用的是ST表,当然你也可以用线段树啥啥的我用的是ST表,当然你也可以用线段树啥啥的Ⅱ.使用链表跳跃查询\color{Red}Ⅱ.使用链表跳跃查询Ⅱ.使用链表跳跃查原创 2020-07-29 16:17:38 · 204 阅读 · 0 评论 -
A. Graph and String(hash+暴力构造)
首先发现假如两个字母相等,那么他们的边一定完全相等首先发现假如两个字母相等,那么他们的边一定完全相等首先发现假如两个字母相等,那么他们的边一定完全相等这是个很重要的结论,这样可以用hash压缩边的状态压缩之后,边的状态最多只有a,b,c三种,大于三种直接NO压缩之后,边的状态最多只有a,b,c三种,大于三种直接NO压缩之后,边的状态最多只有a,b,c三种,大于三种直接NO接着,我们就把点按照边集分成了小于等于三个集合接着,我们就把点按照边集分成了小于等于三个集合接着,我们就把点按照边集分成了小于等于三原创 2020-07-29 15:22:16 · 301 阅读 · 0 评论 -
C. Report(思维,单调队列)
这题也,太,妙,了,吧我,太,菜,了,吧注意到后面出现的ri如果大于前面出现的rj,那么rj没屁用注意到后面出现的r_i如果大于前面出现的r_j,那么r_j没屁用注意到后面出现的ri如果大于前面出现的rj,那么rj没屁用因为前面对[1,rj]排序,后面对[1,ri]排序,最后还是按照[1,ri]的顺序来因为前面对[1,r_j]排序,后面对[1,r_i]排序,最后还是按照[1,r_i]的顺序来因为前面对[1,rj]排序,后面对[1,ri]排序,最后还是按照[1,ri]的顺序来那么用单调栈(原创 2020-07-29 13:01:50 · 296 阅读 · 0 评论 -
D. Robot Rapping Results Report(拓扑排序+二分)
问题有明显的单调性,考虑每次用拓扑排序检验正确性Ⅰ.如果拓扑排序结束,还有点没被入队过,说明有环,有环是无法确定的Ⅰ.如果拓扑排序结束,还有点没被入队过,说明有环,有环是无法确定的Ⅰ.如果拓扑排序结束,还有点没被入队过,说明有环,有环是无法确定的Ⅱ.每次删掉一个点后,会把周围点的入度减减,但是一次最多只有一个点入度变成0.Ⅱ.每次删掉一个点后,会把周围点的入度减减,但是一次最多只有一个点入度变成0.Ⅱ.每次删掉一个点后,会把周围点的入度减减,但是一次最多只有一个点入度变成0.如果多于这个数,那么这几个原创 2020-07-29 10:14:09 · 244 阅读 · 0 评论 -
D. Vasya and Chess(博弈,详解)
这题是真的妙啊~~但是发现 网上解释的比较潦草,自己写一篇当n为奇数时,后手必胜\color{Red}当n为奇数时,后手必胜当n为奇数时,后手必胜因为后手可以一直模仿先手走因为后手可以一直模仿先手走因为后手可以一直模仿先手走比如白字从(1,1)走到(1,2),那么黑子就从(1,n)走到(1,n−1)比如白字从(1,1)走到(1,2),那么黑子就从(1,n)走到(1,n-1)比如白字从(1,1)走到(1,2),那么黑子就从(1,n)走到(1,n−1)这样一直模仿先手走,知道先手走到第n/2+1列这样一原创 2020-07-29 09:55:01 · 364 阅读 · 0 评论 -
D. Nested Segments(树状数组,排序)
先对右端点小到大来排序,维护左端点先对右端点小到大来排序,维护左端点先对右端点小到大来排序,维护左端点由于排序后第iii条线段的右端点小于之后的右端点’所以右边的线段不可能对自己有贡献考虑左边的线段对自己的贡献由于自己的右端点大于前面的线段,想包含他们,还需要左端点小于他们由于自己的右端点大于前面的线段,想包含他们,还需要左端点小于他们由于自己的右端点大于前面的线段,想包含他们,还需要左端点小于他们所以树状数组统计前面左端点大于自己左端点的个数即可所以树状数组统计前面左端点大于自己左端点的个数即可原创 2020-07-29 09:17:19 · 338 阅读 · 0 评论 -
C. Little Artem and Dance(思维模拟)
这题真的不难,但是取模千万注意细节…首先想,如果没有操作二,那太简单了,每次记录往左移和往右移了几步首先想,如果没有操作二,那太简单了,每次记录往左移和往右移了几步首先想,如果没有操作二,那太简单了,每次记录往左移和往右移了几步最后输出就行,因为每个数都是左移或右移了相同的步数最后输出就行,因为每个数都是左移或右移了相同的步数最后输出就行,因为每个数都是左移或右移了相同的步数现在有操作二,我们也可以当成操作一来看待\color{Red}现在有操作二,我们也可以当成操作一来看待现在有操作二,我们也可以当原创 2020-07-28 20:48:05 · 288 阅读 · 0 评论 -
A. Reberland Linguistics(思维转化-DP)
开始老是往贪心or模拟方面想,但是后效性很明显啊!!话说为什么每次codeforce上的dp我都不会哎~定义dp[i][0/1]表示以i开头连续2/3个字母一组,后面的字母有合法分组方式定义dp[i][0/1]表示以i开头连续2/3个字母一组,后面的字母有合法分组方式定义dp[i][0/1]表示以i开头连续2/3个字母一组,后面的字母有合法分组方式那么转移非常明显,觉得不明显就看代码把那么转移非常明显,觉得不明显就看代码把那么转移非常明显,觉得不明显就看代码把最后用一个set去重最后用一个set去重原创 2020-07-28 10:11:26 · 256 阅读 · 0 评论 -
B. Puzzles(期望+树型dp)
第一次遇到这种题,太巧妙了把~记点u的期望是dp[u],u的子树大小是size[u]记点u的期望是dp[u],u的子树大小是size[u]记点u的期望是dp[u],u的子树大小是size[u]设v是u的唯一儿子,那么dp[v]=dp[u]+1设v是u的唯一儿子,那么dp[v]=dp[u]+1设v是u的唯一儿子,那么dp[v]=dp[u]+1如果u除了v儿子,还有p儿子.如果u除了v儿子,还有p儿子.如果u除了v儿子,还有p儿子.那么有0.5的概率先dfs(p),此时v是dp[u]+1+size[p]原创 2020-07-28 07:09:57 · 285 阅读 · 0 评论 -
D. Vasiliy‘s Multiset(带删除操作的异或字典树)
又是01字典树,话说字典树没其他考法了吗呜呜呜对于插入的每一个x对于插入的每一个x对于插入的每一个x把x分解为30位二进制,从高位到低位按照是0还是1插入字典树把x分解为30位二进制,从高位到低位按照是0还是1插入字典树把x分解为30位二进制,从高位到低位按照是0还是1插入字典树那么这颗字典树的深度是30插入的同时标记cnt这个节点被几个数字经过插入的同时标记cnt这个节点被几个数字经过插入的同时标记cnt这个节点被几个数字经过删除也是同理,将cnt−−,变成0就走不通了删除也是同理,将cnt--原创 2020-07-27 11:22:40 · 292 阅读 · 0 评论 -
B. Unmerge(基础的01背包)
说实话这是DP我是没想到的DP都这尿性啊,都得先转化问题再同DP求解.如果一个数后面有一串比他小的数,那么这一段一定来自同一个序列如果一个数后面有一串比他小的数,那么这一段一定来自同一个序列如果一个数后面有一串比他小的数,那么这一段一定来自同一个序列比如5 3 1 6 4 2可以分组为[5,3,1],[6,4,2]可以分组为[5,3,1],[6,4,2]可以分组为[5,3,1],[6,4,2]为啥5,3,1一定在同一组内?为啥5,3,1一定在同一组内?为啥5,3,1一定在同一组内?因为这三个数能原创 2020-07-27 09:50:10 · 413 阅读 · 0 评论 -
A. String Transformation 1(单向边的并查集)
乍一看像个贪心乍一看像个贪心乍一看像个贪心观察一个这个样例观察一个这个样例观察一个这个样例aabbcc由于第一个a要变成b由于第一个a要变成b由于第一个a要变成b第二个a要变成c第二个a要变成c第二个a要变成c第三个b要变成c第三个b要变成c第三个b要变成c按理来说需要操作三次但是由于a−>b,b−>c但是由于a->b,b->c但是由于a−>b,b−>c所以a−>c的步骤就不需要了所以a->c的步骤就不需要了所以a−>c的步骤就不需要了原创 2020-07-27 08:24:51 · 643 阅读 · 0 评论 -
D. Beautiful numbers(压缩状态的数位DP)
一道需要优化的数位DP。开始一直在想怎么储存状态,能快速判断当前数能否被前面每个数位整除?开始一直在想怎么储存状态,能快速判断当前数能否被前面每个数位整除?开始一直在想怎么储存状态,能快速判断当前数能否被前面每个数位整除?被前面每个数位整除,也就是当前数字能整除前面每一位的lcm(最小公倍数)被前面每个数位整除,也就是当前数字能整除前面每一位的lcm(最小公倍数)被前面每个数位整除,也就是当前数字能整除前面每一位的lcm(最小公倍数)所以令前面的数位的lcm为prelcm所以令前面的数位的lcm为pr原创 2020-07-26 08:09:37 · 390 阅读 · 0 评论 -
2020百度之星初赛二:Drink(费用流)
由于每个人只能匹配一种饮料由于每个人只能匹配一种饮料由于每个人只能匹配一种饮料所以可以看成匹配问题,并且匹配有权值,所以用最大费用最大流所以可以看成匹配问题,并且匹配有权值,所以用最大费用最大流所以可以看成匹配问题,并且匹配有权值,所以用最大费用最大流Ⅰ.源点向6种字符串连边,流量无限大,权值为0Ⅰ.源点向6种字符串连边,流量无限大,权值为0Ⅰ.源点向6种字符串连边,流量无限大,权值为0Ⅱ.每种字符串向对应的第i喜欢的饮料连边,流量是这种字符串个数,权值是4−iⅡ.每种字符串向对应的第i喜欢的饮料连边原创 2020-07-25 22:24:14 · 524 阅读 · 0 评论 -
C. Journey(拓扑dp)
这是真没想到,其实也不难的考虑dp.但是状态有点存不下,毕竟每条路的花费到了1e9级别考虑dp.但是状态有点存不下,毕竟每条路的花费到了1e9级别考虑dp.但是状态有点存不下,毕竟每条路的花费到了1e9级别那不如令dp[i][j]表示从1到i走了j个节点的最小花费那不如令dp[i][j]表示从1到i走了j个节点的最小花费那不如令dp[i][j]表示从1到i走了j个节点的最小花费那么拓扑排序,1是入度为0的点那么拓扑排序,1是入度为0的点那么拓扑排序,1是入度为0的点一层一层维护下来一层一层维护下来一原创 2020-07-11 15:38:53 · 964 阅读 · 0 评论 -
C. Epidemic in Monstropolis(模拟,细节)
很不好写的模拟首先把区间分成若干个小区间,每个小区间相加等于对应的bi首先把区间分成若干个小区间,每个小区间相加等于对应的b_i首先把区间分成若干个小区间,每个小区间相加等于对应的bi那么对于每个小区间,我们挑一个最大的怪兽开始吃那么对于每个小区间,我们挑一个最大的怪兽开始吃那么对于每个小区间,我们挑一个最大的怪兽开始吃但是注意这个怪兽一定要能吃左或右边的怪兽才行然后就是下标问题了然后就是下标问题了然后就是下标问题了前面如果有i个小区间,那么前面就只剩下i只怪兽前面如果有i个小区间,那么前面就只原创 2020-07-11 14:19:43 · 419 阅读 · 0 评论 -
D. Winter Is Coming(连通块贪心合并)
思路大体相同,可惜最后没有特判结尾因为负数温度形成一个一个的连通块因为负数温度形成一个一个的连通块因为负数温度形成一个一个的连通块那么一开始假设最坏,在每个连通块的开始换冬季轮胎那么一开始假设最坏,在每个连通块的开始换冬季轮胎那么一开始假设最坏,在每个连通块的开始换冬季轮胎在每个连通块的结尾换夏季轮胎在每个连通块的结尾换夏季轮胎在每个连通块的结尾换夏季轮胎接下来发现连通块之间假如不换任何轮胎可以减少2次换轮胎次数接下来发现连通块之间假如不换任何轮胎可以减少2次换轮胎次数接下来发现连通块之间假如不换任原创 2020-07-11 10:05:02 · 355 阅读 · 0 评论 -
D. Cloud of Hashtags(逆向贪心)
这题正着来做很麻烦这么想,删掉后缀后,字符串的字典序只减不增这么想,删掉后缀后,字符串的字典序只减不增这么想,删掉后缀后,字符串的字典序只减不增所以,第n个字符串一定不会删后缀所以,第n个字符串一定不会删后缀所以,第n个字符串一定不会删后缀那么检查第n−1个后缀,删掉一些让它小于等于第n个字符串那么检查第n-1个后缀,删掉一些让它小于等于第n个字符串那么检查第n−1个后缀,删掉一些让它小于等于第n个字符串以此类推.........以此类推.........以此类推.........#include原创 2020-07-10 14:43:14 · 464 阅读 · 0 评论 -
C. Jon Snow and his Favourite Number(构造)
确实非常巧妙确实非常巧妙确实非常巧妙注意到ai最大1000,k最大1000,所以ai⊕k最大是1023注意到a_i最大1000,k最大1000,所以a_i\oplus k最大是1023注意到ai最大1000,k最大1000,所以ai⊕k最大是1023所以直接暴力模拟k次,每次开个桶记录j这个数字出现了几次所以直接暴力模拟k次,每次开个桶记录j这个数字出现了几次所以直接暴力模拟k次,每次开个桶记录j这个数字出现了几次那么第i次操作的桶怎么转移到i+1次的桶呢?那么第i次操作的桶怎么转移到i+1次的桶原创 2020-07-10 12:57:45 · 398 阅读 · 0 评论 -
C. The Tag Game(树的深度)
我还是想复杂了啊跑出Alice到每个点的距离,跑出Bob到每个点的距离跑出Alice到每个点的距离,跑出Bob到每个点的距离跑出Alice到每个点的距离,跑出Bob到每个点的距离那么Bob想跑的尽可能远也就是以Alice为根最深的点那么Bob想跑的尽可能远也就是以Alice为根最深的点那么Bob想跑的尽可能远也就是以Alice为根最深的点那我们可以枚举每个点那我们可以枚举每个点那我们可以枚举每个点只要Bob到这个点的距离小于Alice到这点的距离就可以过去,取max只要Bob到这个点的距离小于Ali原创 2020-07-10 11:42:16 · 378 阅读 · 0 评论 -
C. Jury Marks(map水题)
这题的数据好弱…直接用map水过去了暴力枚举b[1]的位置,于是初始分就确定了,检查初始分是否合法暴力枚举b[1]的位置,于是初始分就确定了,检查初始分是否合法暴力枚举b[1]的位置,于是初始分就确定了,检查初始分是否合法怎么检查?直接从a1加到an,期间一直往map里加怎么检查?直接从a_1加到a_n,期间一直往map里加怎么检查?直接从a1加到an,期间一直往map里加看看所有的k个bi是否都出现过,都出现过就可以看看所有的k个b_i是否都出现过,都出现过就可以看看所有的k个bi是否都出现过原创 2020-07-10 10:59:38 · 293 阅读 · 0 评论 -
A. The Meaningless Game(因子思维)
已经想到了,却不知道怎么处理,哎设每次乘的数是k1,k2,k3.......kn设每次乘的数是k_1,k_2,k_3.......k_n设每次乘的数是k1,k2,k3.......kn设a=k12k22k3k4kn设a=k_1^2k_2^2k_3k_4k_n设a=k12k22k3k4kn那么b=k1k2k32k42kn2那么b=k_1k_2k_3^2k_4^2k_n^2那么b=k1k2k32k42kn2问题就在这里,我开始想的是求出a,b的gcd问题就在这里,我开始想的是原创 2020-07-09 17:57:30 · 297 阅读 · 0 评论 -
C. Four Segments(记录前驱dpO(n)解法)
我也真佩服自己能用dp写…其实思路不难,但是实现的细节很重要啊其实思路不难,但是实现的细节很重要啊其实思路不难,但是实现的细节很重要啊看题目里面,一共可以看作4个区间看题目里面,一共可以看作4个区间看题目里面,一共可以看作4个区间[0,d0)全取加上,[d1,d2)全减,[d2,d3)全加,[d3,n)全减[0,d0)全取加上,[d1,d2)全减,[d2,d3)全加,[d3,n)全减[0,d0)全取加上,[d1,d2)全减,[d2,d3)全加,[d3,n)全减这4个区间对应1−4这四个状态,下面是d原创 2020-07-09 16:13:24 · 417 阅读 · 0 评论 -
D. Driving Test(贪心+栈)
说是模拟,其实更像贪心如何清晰的处理超车和限速是关键Ⅰ.超车\color{Red}Ⅰ.超车Ⅰ.超车遇到不允许超车的牌子并不马上无视掉,而是让遍历no_allow++遇到不允许超车的牌子并不马上无视掉,而是让遍历no\_allow++遇到不允许超车的牌子并不马上无视掉,而是让遍历no_allow++如果后续超车,就加上no_allow,意思是无视掉之前所有超车牌如果后续超车,就加上no\_allow,意思是无视掉之前所有超车牌如果后续超车,就加上no_allow,意思是无视掉之前所有超车牌如果遇到允原创 2020-07-09 13:08:23 · 413 阅读 · 0 评论 -
C. Naming Company(细节,贪心)
怎么说呢?这题还是很有迷惑性的怎么说呢?这题还是很有迷惑性的怎么说呢?这题还是很有迷惑性的比较容易想到的做法肯定是每次拿a串最小的字母构造字典序最小每次拿b串最大的字母构造字典序最大那么假设当前q为a串最小字母,w为b串最大字母那么假设当前q为a串最小字母,w为b串最大字母那么假设当前q为a串最小字母,w为b串最大字母Ⅰ.构造字典序最小时:q<=w,尽量往左边放Ⅰ.构造字典序最小时:q<=w,尽量往左边放Ⅰ.构造字典序最小时:q<=w,尽量往左边放如果q>w,说明b串后面的原创 2020-07-09 11:31:36 · 306 阅读 · 0 评论 -
C. Minimal string(贪心法,栈)
这题贪心还是比较好写的…由于t串只能从末尾取字母,所以可以当成一个栈来处理由于t串只能从末尾取字母,所以可以当成一个栈来处理由于t串只能从末尾取字母,所以可以当成一个栈来处理预处理flag数组,表示s串每个位置往后的最小字母预处理flag数组,表示s串每个位置往后的最小字母预处理flag数组,表示s串每个位置往后的最小字母那么从s串的1顺序枚举到s串的末尾那么从s串的1顺序枚举到s串的末尾那么从s串的1顺序枚举到s串的末尾Ⅰ.如果这个字母是往后最小的,那么把栈中所有小于等于的输出,再输出这个字母\c原创 2020-07-09 10:10:29 · 308 阅读 · 0 评论 -
A. Office Keys(二分+思维贪心含证明)
本来都想到二分开始写check函数的,结果脑子一乱觉得不能贪心…贪心法则对于二分的时间x,最左边的人要尽量选最左边的钥匙\color{Red}对于二分的时间x,最左边的人要尽量选最左边的钥匙对于二分的时间x,最左边的人要尽量选最左边的钥匙当最左边的钥匙在最左边人的左边时显然正确,因为后面的人想拿这把要走回来,要走更多的路当最左边的钥匙在最左边人的左边时显然正确,因为后面的人想拿这把要走回来,要走更多的路当最左边的钥匙在最左边人的左边时显然正确,因为后面的人想拿这把要走回来,要走更多的路当最左边的钥匙原创 2020-07-08 22:27:57 · 274 阅读 · 0 评论 -
A. String Reconstruction(三种解法,排序贪心或跳步或并查集)
这题看了下有很多解法,一步一步来Ⅰ.区间贪心排序\color{Red}Ⅰ.区间贪心排序Ⅰ.区间贪心排序这是自己想的,而且似乎没看到有人用?(明明相对最容易想到)把每个字符串出现的每个位置记作一个区间\color{orange}把每个字符串出现的每个位置记作一个区间把每个字符串出现的每个位置记作一个区间如果按照左端点排序,那就记录当前匹配到的最右端点last如果按照左端点排序,那就记录当前匹配到的最右端点last如果按照左端点排序,那就记录当前匹配到的最右端点last那么这个区间有贡献的地方就是[l原创 2020-07-08 20:35:26 · 346 阅读 · 0 评论 -
K. Travel Cards(暴力)
这1800的题这么水我是没想到的…直接把所有航班划分为若干个集合集合内的航班两个地点都是一样的(部分目的地和终点)计算每个集合的花费,排序替换即可#include <bits/stdc++.h>using namespace std;const int maxn=609; int n,a,b,k,f;map<string,int>m;string s[maxn][2];int cost[maxn][maxn],ans,id,w[maxn],top;int mai原创 2020-07-08 17:23:56 · 277 阅读 · 0 评论 -
B. Tell Your World(map暴力或思维)
这题我很笨,很暴力,数据大一点可能就被卡了我很暴力的枚举两个点确定斜率我很暴力的枚举两个点确定斜率我很暴力的枚举两个点确定斜率Ⅰ.然后这两个点确定一条直线,那么筛掉所有在这条直线的点Ⅰ.然后这两个点确定一条直线,那么筛掉所有在这条直线的点Ⅰ.然后这两个点确定一条直线,那么筛掉所有在这条直线的点Ⅱ.其余所有没被筛掉的点在另一条平行线上,判断斜率是否相等就行Ⅱ.其余所有没被筛掉的点在另一条平行线上,判断斜率是否相等就行Ⅱ.其余所有没被筛掉的点在另一条平行线上,判断斜率是否相等就行这样是n3的,可以用ma原创 2020-07-08 16:42:53 · 259 阅读 · 0 评论 -
H. Palindromic Cut(思维,分类暴力)
感觉自己思路还行,分类也很清晰直接枚举每个回文串最大的长度i,从n枚举到1设输入的字符为奇数的有ji个,命名为设输入的字符为奇数的有ji个,命名为设输入的字符为奇数的有ji个,命名为奇数字符否则命名为偶数字符Ⅰ.显然,n%i==0Ⅰ.显然,n\%i==0Ⅰ.显然,n%i==0Ⅱ.当i是偶数,那么每个回文串不允许出现单独的字符,所以如果有某个字符单独出过就不行,否则可以Ⅱ.当i是偶数,那么每个回文串不允许出现单独的字符,所以如果有某个字符单独出过就不行,否则可以Ⅱ.当i是偶数,那么每个回文串不允许出原创 2020-07-08 15:17:40 · 262 阅读 · 0 评论 -
A. Fair(多源bfs)
如果从每种货物开始bfs是n2的如果从每种货物开始bfs是n^2的如果从每种货物开始bfs是n2的但是k只有100,可以把同一种类型的货物一起bfs但是k只有100,可以把同一种类型的货物一起bfs但是k只有100,可以把同一种类型的货物一起bfs还是bfs的老套路,谁先到保留谁还是bfs的老套路,谁先到保留谁还是bfs的老套路,谁先到保留谁#include <bits/stdc++.h>using namespace std;#define pb push_back#define原创 2020-07-08 09:12:08 · 244 阅读 · 0 评论 -
D. Merge Equals(map贪心法)
不知道为什么感觉其他博客写的很复杂,有点看不懂…用map记录每个数值出现的上一次下标用map记录每个数值出现的上一次下标用map记录每个数值出现的上一次下标在枚举到ai时,看一下map以前有没有ai这个值,没有就把下标存进去在枚举到a_i时,看一下map以前有没有a_i这个值,没有就把下标存进去在枚举到ai时,看一下map以前有没有ai这个值,没有就把下标存进去有的话就取出以前的那个下标,抹掉,自己翻倍,然后重复这个过程有的话就取出以前的那个下标,抹掉,自己翻倍,然后重复这个过程有的话就取出以前的原创 2020-07-07 19:20:23 · 295 阅读 · 0 评论 -
C. Make It Equal(模拟)
其实就是一个模拟,但是我还是不会写…正解:预处理一个cnt[i],表示高度大于等于i的块有几个正解:预处理一个cnt[i],表示高度大于等于i的块有几个正解:预处理一个cnt[i],表示高度大于等于i的块有几个那么从最大的高度开始,每次都贪心的去小1的高度那么从最大的高度开始,每次都贪心的去小1的高度那么从最大的高度开始,每次都贪心的去小1的高度#include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;int原创 2020-07-07 17:24:23 · 440 阅读 · 0 评论 -
C. Permutation Game(dfs记忆化博弈简洁版本)
因为以前写过类似的博弈,所以很快想出来了因为从点i出发,假设可以去点x1,x2,x3.......因为从点i出发,假设可以去点x_1,x_2,x_3.......因为从点i出发,假设可以去点x1,x2,x3.......在能去的这些路径下,只要有一条是必胜路径就赢了在能去的这些路径下,只要有一条是必胜路径就赢了在能去的这些路径下,只要有一条是必胜路径就赢了所以设dp[i]为硬币在i位置先手是否必胜所以设dp[i]为硬币在i位置先手是否必胜所以设dp[i]为硬币在i位置先手是否必胜所以对于每个位原创 2020-07-07 14:48:35 · 382 阅读 · 0 评论 -
D. Merge Sort(规律,分治)
哎看到这题完全没思路,都不晓得怎么动笔首先k一定是奇数因为第一次单独的调用merge(0,n)接下来分成两个子区间,若子区间有序调用0次,无序调用2次可见k=1+2+2+2+2+2+2…+2知道这个就好办了,直接模拟merge函数若当前k还存在,那就交换a[mid-1]和a[mid]使得当前区间无序但是这样左右两区间内仍然有序,k-=2#include <bits/stdc++.h>using namespace std;const int maxn=2e5+10;int原创 2020-07-03 16:53:26 · 295 阅读 · 0 评论 -
C. Remove Extra One(神仙思维)
感觉太巧妙了吧…怎么也想不到开始一直以为是树状数组什么的…没想到是思维题用dp[x]数组维护删除后对整个序列的record数量用dp[x]数组维护删除后对整个序列的record数量用dp[x]数组维护删除后对整个序列的record数量设当前第i个数字是ai,假如ai既不是最大也不是次大那么压根不用管设当前第i个数字是a_i,假如a_i既不是最大也不是次大那么压根不用管设当前第i个数字是ai,假如ai既不是最大也不是次大那么压根不用管因为删掉前面的任意一个数不可能使ai变成record\color原创 2020-07-03 12:02:20 · 366 阅读 · 0 评论