
codeforces
ナナ色のブランク
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #664 (Div. 2)C. Boboniu and Bit Operations(思维+dp)
题目链接点这里!!题目大意:对a中的每一个数在b中选一个数进行&运算得到c,最后将所有c|运算,要求尽量小。思路:第一次看到这个的时候能想到的就是dp了,因为每次选取的数即使大最后或运算后也可能小,所以贪心是肯定不行的。那么就开始考虑状态,影响我们做决策的是什么因素,就是上一个ai和哪个bj结合,那么我们能确定他要和哪个结合吗?不能,因为或运算的缘故我们不能保证无后效性。那么我们就要考虑将所有可能状态保存下来,考虑设计一个能判断某个数字存不存在的状态。很明显a和b最大2^9,最大也就是511原创 2020-08-13 13:44:54 · 221 阅读 · 0 评论 -
C The Number Of Good Substrings(思维+位运算)
题目链接题目大意:就是给你一个二进制字符串,让你计算它有多少子串满足他的长度等于他的二进制值。思路:看到二进制字符串脑子里应该想到的是爆int要32位,long long 要64位。这时看一眼题目给的数字,长度最大2e5,所以有效的二进制最多也就20位,然后就直接取找就行了。从左到右扫,遇到0就记录一下,遇到1之后就往后延伸20位,每延伸一位用一个数字记录一下当前的十进制数,当这个十进制数字大于当前长度+前导零数量时就break当前循环。因为这个数字是呈指数增长的,你的长度变化赶不上它数值变化。然原创 2020-07-24 16:21:39 · 247 阅读 · 0 评论 -
Codeforces Round #658 (Div. 2)总结
感受:一开始被b给唬住了,看着是个博弈,结果越看越像水题,浪费了不少时间,c2没想到O(n)O(n)O(n)做法,勉强打了个暴力交的c1,然后快结束了才看的D,也想到01背包了,没时间了。得出一个教训,每次遇到自己不会的题的时候往下看一道题,说不定就有会做的,可能太往下的题不在知识范围,那就不看。不能在一个题上吊死。。就像这个D最后一共才思考了七八分钟。。要打代码结果结束了。A题题目大意:在a中找一个b的最短子序列。思路:都说最短了,就是1呗。代码:#include<bits/stdc+原创 2020-07-22 18:19:20 · 148 阅读 · 0 评论 -
Codeforces Round #656 (Div. 3)总结
题目链接感受:这次一共做出四道题。感觉自己的思维还是不那么灵活,在A题卡了半小时(丢人)。前二十分钟看的A题感觉有思路又感觉没思路,索性直接看B,两分钟AC了,然后又看了两分钟A,还是写不出,又看了C,做了十分钟AC 了,这时候看了眼D,觉得应该出的不会快,然后决定静心看A,好好分析了几分钟AC了。这时候还一个小时,先是看了一眼E题,一个图论题,一开始的想法是并查集判环,但写到一半发现我处理不了一些细节,然后就放弃了去看D。D题给我的感觉是像一个贪心,分析了一下发现当前决策会影响下面的决策,所以贪心否定了原创 2020-07-18 12:51:32 · 518 阅读 · 0 评论 -
Educational Codeforces Round 91 (Rated for Div. 2) D. Berserk And Fireball
题目链接题目大意:有一个长度为n的数组a和一个长度为m的数组b。你可以执行两种操作,花费x消除a中连续k个数,或者花费y消除a中连续两个数中较小的那个数。问最少花费多少能从a中得到b。不能则输出-1.思路:因为最近训练的缘故,思路很快就有了。首先只有三种情况:1.都用方案1,有剩余则对剩余的使用方案二。2.都用方案2.3.在2的基础上可能会出现区间内最大值大于两个端点。所以我们可以用方案一消除那些最大值,最终也能消除掉区间内的所有数字。当然这个前提是这个区间长度大于等于k。求最大值直接O(n).原创 2020-07-13 15:55:36 · 395 阅读 · 0 评论 -
Educational Codeforces Round 89 (Rated for Div. 2)C. Palindromic Paths(思维)
原题链接题目大意:从(1,1)走到(n,m)为了使所有路径都成为回文路径,最少需要更改几个字符。思路:若要使路径回文的话,就要考虑回文串的性质,两边对称,那么就是说第一步和最后一步上的字符要相等,第二部与倒数第二步要相等,依次类推。所以现在的问题就是判断当前所在方格是第几步。先想(1,1)是第几步,1+1-1-1=0第零步,(n,m)是第几步,n+m-1-1步。所以就可以发现每一个方格一定只能有一个步数,而这个步数是i+j-2,(从1,1走所以是减二)。根据回文串的性质,第i步一定和第m+n-2.原创 2020-06-12 18:19:39 · 207 阅读 · 0 评论 -
Codeforces Round #643 (Div. 2)D. Game With Array(思维)
原题链接题意:就是两个人在那比赛。如果a能找到使b输的构造方式,那么a赢输出yes并输出所构造序列,如果不能找到就输出no。思路:首先先蹦入我脑子里的是构造出n-1个1,那么剩下的就是s-n+1像下面这样1,1,1,...,S−N+11,1,1,...,S-N+11,1,1,...,S−N+1把这个序列叫做t序列把。这个时候能注意到[1,n−1][1,n-1][1,n−1]内的所有数都可以构造出来,同时我们注意到,从[s−n+1,s][s-n+1,s][s−n+1,s]这个区间内的所有数也可以.原创 2020-05-17 13:56:20 · 289 阅读 · 0 评论 -
Codeforces Round #643 (Div. 2)B. Young Explorers(线性dp)
原题链接题意:给你一个长度为n的数组,找出其最多能被分成几组,其中元素ai的值代表它所在的组最少有ai个元素。思路:贪心的选取每个元素,先对数组升序排列,贪心都可以用dp来做。这个题贪心和dp做起来都代码量都一样的。只不过是一个一直维护全局最优一个一直保证局部最优罢了。首先设计状态,dp[i]表示从1到i所能得到的最大组数。那么就有两种可能选取的情况了第i个人可以进队,条件是i-a[i]>=0.第i个人无法组成队伍。那么状态转移方程就设计出来了。dp[i]=max(dp[i−a[i.原创 2020-05-17 13:30:36 · 241 阅读 · 0 评论 -
Codeforces Round #643 (Div. 2)A. Sequence with Digits(模拟)
原题链接题意:给你一个数a,对他执行k次操作,每次操作让当前数a加上组成a的每位数中最大值与最小值的积。输出最后得到的结果。思路:一步步模拟就行,只要中间出现了0这位数立马break掉,因为出现0之后改数字再怎么加也不会变了。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int N=2e5+10;ll cal(ll x){.原创 2020-05-17 13:19:35 · 706 阅读 · 1 评论 -
Codeforces Round #642 (Div. 3)D. Constructing the Array(广度优先搜索)
原题链接题意:给你一个长度为n的数组a初始元素全为0,每次把含0最多的子序列的中间元素设为当前的操作次数,输出最后不含0的a数组内所有元素。思路:一开始看到就感觉和归并排序和快速排序的写法差不多,分区间去弄。就写了以下发现深搜没写出来,没法区分区间内0的个数。既然深搜不行,另一个搜索就是广搜了,普通的队列是不行的,因为这里是先对含0最多并且靠左边的区间操作。那么就用优先队列定义以下优先级就可以了。比赛的时候没写错了很可惜。。代码:#include<bits/stdc++.h>us.原创 2020-05-15 11:45:37 · 1592 阅读 · 0 评论 -
Codeforces Round #641 (Div. 2)C. Orac and LCM(数论+公式)
原题链接思路:这个题需要知道数论中的一个公式gcd(lcm(a1,a2),lcm(a1,a3),..lcm(a1,ak))=lcm(a1,gcd(a2,a3,a4,...,ak))gcd(lcm(a1,a2),lcm(a1,a3),..lcm(a1,ak))=lcm(a1,gcd(a2,a3,a4,...,ak))gcd(lcm(a1,a2),lcm(a1,a3),..lcm(a1,ak))=lcm(a1,gcd(a2,a3,a4,...,ak))知道这个就能很简单的写出来了代码:#inclu.原创 2020-05-13 23:38:19 · 300 阅读 · 0 评论 -
Codeforces Round #641 (Div. 2)B. Orac and Models(线性dp,最长上升子序列)
原题链接题目大意:就是给你一个长度为n的序列,让你从中找出一个满足以下条件的子序列,(序列要递增,并且找到的子序列中元素下标在原序列中后者下标可以整除前者)思路:看到三秒的时限可以想到暴力,但实现难度过大,举个例子,首先选择下标为1的元素,那么为了整除下一个元素可以选2,选3,同理,选了2下一个可以选4,选6,依次类推,所以想到dp,那么接下来设计状态,设dp[i]表示从i到n这个序列中最长的满足条件的子序列,那么dp[i]=max(dp[j]+1)要保证j能够整除i,所以j每次加i。最后在1到原创 2020-05-13 13:23:11 · 276 阅读 · 1 评论 -
Codeforces Round #641 (Div. 2)A. Orac and Factors
原题链接题目大意:给你一个数n,让你对他执行k次操作,每次操作加上当前数n的最小质因子(除去1),输出每次询问的最终结果。思路:我们发现给的数n只有两种情况,奇数或偶数。偶数:偶数的最小质因子只能是2,并且加上2之后还是偶数,所以只需要对n加上2*k即可。奇数:奇数的最小质因子不一定是2,但当他加上他的最小质因子之后的结果一定是偶数(奇数+奇数=偶数)所以我们只需要先预处理出10610^{6}106内的所有数的最小质因子是多少,存在一个数组v中,对n先加上一次他的最小质因子,然后加上(k-1)*原创 2020-05-13 13:06:55 · 248 阅读 · 0 评论