![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces
文章平均质量分 72
Cichard
这个作者很懒,什么都没留下…
展开
-
cf1360G
1360G 1900原创 2020-06-05 15:09:57 · 255 阅读 · 0 评论 -
几个cf水题
1358C 1600题意:在一个类似于三角形排列的二维数组(即[1,1]->[1,2]->[2,1]->[1,3]->[2,2]->[3,1]这样类似三角形的递增排列)一个起点sx,sy,和终点ex,ey,问你从起点到终点的路径和有多少种可能,且路径的方向只能往下或者往右,思路:可以模拟一下,从一个点到另一个点路径有多种,而且其中有可能会有虽然然路径不同,但是路径和相同的情况,所以,可以想想路径的最大值和路径的最小值,然后判断在路径的最大值和最小值之间是否会存在遗漏,显然通原创 2020-06-04 21:26:50 · 275 阅读 · 0 评论 -
cf1359C
1359C 1700原创 2020-06-05 15:52:35 · 164 阅读 · 0 评论 -
11.29~11.30日cf刷题记录
D. Radio Towerscodeforces 1452D1600的题,分子菲波那契数列,分母2^n,然后求分子除分母对mod取余,费马小定理,mod为质数,gcd(y,mod)==1x/y%mod = x*y^(mod-2)%mod代码为一个快速幂加一个定理:int a[maxn];ll qpow(ll a, ll b){ ll res = 1; while(b>0){ if(b&1) res = res*a%mod; b&g原创 2020-11-30 16:28:08 · 159 阅读 · 0 评论 -
codeforces 1443D Extreme Subtraction 贪心或差分
1433D Extreme Subtraction原创 2020-11-09 19:08:09 · 199 阅读 · 2 评论 -
codeforces1406C. Link Cut Centroids 树的重心板子题
1406C 1700之前没听过树的重心,还以为是离散里面的知识,主要是补充概念原创 2020-09-20 10:18:48 · 268 阅读 · 0 评论 -
codeforces1405D. Tree Tag 树的直径+思维
1405D 1900原创 2020-09-19 20:26:45 · 237 阅读 · 0 评论 -
codeforces1405C. Balanced Bitstring 贪心
1405C 1500贪心水题,没想到原创 2020-09-19 12:34:08 · 119 阅读 · 0 评论 -
codeforces1175C 贪心+思维
1175C 1600题意:给定一个序列a,找出一个x使得di=|ai-x|,然后对数组d进行排序,将d(k+1),作为结果,求x的位置使得d(k+1)思路:有点考思维,看了代码之后都还是有点蒙,首先是我们能想到的是对与x取值的讨论,如果x在[a[i], a[i+k]]区间内,不考虑这个区间之外的数,(为什么这么说呢,因为如果考虑了,那么第k+1大的数就可能不再这个区间内了,那么问题就来了,那结论不就是错误的了吗,但是我是对i进行了一个遍历,之后如果有更小的,会进行更新,也就不存在这样的的问题了)可以得到原创 2020-09-17 19:58:53 · 146 阅读 · 0 评论 -
codeforces1176E bfs
1176E 1700题意:思路:原创 2020-09-17 16:35:51 · 118 阅读 · 0 评论 -
codeforces1176D 数筛+思维
1176题意:思路:原创 2020-09-17 11:18:32 · 316 阅读 · 0 评论 -
codeforces1354D做过的题,再看一遍
1转载 2020-09-17 10:46:11 · 94 阅读 · 0 评论 -
codeforces1303D 贪心+位运算
1303D 1900题意:给你一个数n和长度为m的数组,同时这m个数保证都是2的幂次方,问你是否可以通过对m中的数除2的操作,然后相加得到m,如果能打印最小的操作数,如果不能打印-1思路:从题目中2的幂次方可以联想到这是一个和位运算有关的题目,如果分别把n和m中的数变成二进制来计算,从低位到高位,如果m中的数在二进制,该位为0,而n为1,那么就意味着,m中这个位要向前面的取一,即a[pos]–,而为什么是从低位到高位,而不是高位到低位,因为我们的低位是首先要满足的,而你要最优的操作数,如果从最高位开始,原创 2020-09-16 09:21:59 · 119 阅读 · 0 评论 -
codeforces1294D 贪心
1294D 1600(最近不知道为啥思维下滑很严重)题意:给你q组询问,和操作数x,你能对这个询问+n操作数或者-n操作数,问你每一次询问过后,最小的数是多少思路:贪心,首先对于每一组询问都对于x取于,即这个询问能得到的最小的数是多少,然后对这个0~x-1进行标记,或者说更新,即对x取余之后这个数最小为多少,这里是本题最主要的贪心思想,标程跑了2000ms多代码如下#pragma GCC optimize("Ofast","inline","-ffast-math")#pragma GCC ta原创 2020-09-15 10:25:52 · 121 阅读 · 0 评论 -
codeforces1409D 暴力
1409D原创 2020-09-12 20:15:09 · 242 阅读 · 0 评论 -
codeforces1407C 比较少做的题,互动题
1407C原创 2020-09-12 19:43:20 · 166 阅读 · 0 评论 -
codeforces1407B 题意比较模糊
1407B原创 2020-09-12 19:22:47 · 157 阅读 · 0 评论 -
codeforces1365E 暴力+思维
1365E原创 2020-09-12 19:03:56 · 98 阅读 · 0 评论 -
codeforces1361B 暴力
1361B原创 2020-09-12 18:25:38 · 130 阅读 · 0 评论 -
codeforces1176C 队列贪心+暴力
1175C原创 2020-09-12 17:45:28 · 192 阅读 · 0 评论 -
codeforces1367D 思维模拟
1367D 1800原创 2020-09-08 10:55:37 · 140 阅读 · 0 评论 -
codeforces1392D 字符串处理
1292D 1700原创 2020-09-08 10:20:11 · 250 阅读 · 0 评论 -
codeforces1312D 组合数学
1312D 1700题意:给你n个位置和m个数,在m个数中挑出n-1个数放入到n个位置中,其中有一个数可以用两次,同时要使得这n个数的排列为先上升后下降,问有多少种排列方式思路:首先从m个数中挑出n-1个数为C(m,n-1),然后选择其中重复两次的数,最大值不能选,所以乘上n-2,之后对n个数的位置进行讨论,我们可以知道,重复两次的的数一定在最大值两边,然后其他n-3(一个为最大值,两个为相同的)个数可能在最大值左边也可能在最大值右边,所以有2^(n-3),综上所述,答案就出来了,主要就是算法问题,吐血原创 2020-09-07 08:22:14 · 133 阅读 · 0 评论 -
codeforces1400B 贪心
1400B 1700的题题意:两个人有p和f的金币,一个店铺里有cnts把剑,cntw把斧头,剑的价值是s,斧头的价值是w,两人的金币不能合起来用,问如何买才能得到最多数量的工具思路:贪心,设剑的价值更小,首先把价值更小的全部买完,如果不行,直接打印,如果能,那么对第一个人枚举买剑的数量,同时在此情况下,能买最多斧头,另一个人把剩下的剑买完,然后在买最多数量的斧头即可代码如下:#pragma GCC optimize("Ofast","inline","-ffast-math")#pragma G原创 2020-08-28 10:37:47 · 215 阅读 · 0 评论 -
codeforces1400D 思维
1400D 1900的水题题意:一个数组找出有多少组i,j,k,l,使得a[i]=a[k]&&a[j]=a[l]思路:看到范围可以想到应该是一个o(n^2)的复杂度,对于这四个值,我们肯定不能直接暴力枚举,可以现固定一个点然后对其他点进行枚举,那么选哪个点进行固定就成了一个问题如果从一开始就说k是不太现实的,但是可以经过分析得到我们要固定的点是k,为什么这么说呢,如果你固定了k,你可以在预处理i的值,同时在进行l的枚举的时候可以兼顾j的值,当你a[k]=a[l]的时候,可以通过预处理直原创 2020-08-28 09:58:56 · 265 阅读 · 0 评论 -
codeforces1395D 贪心
思路清晰很重要,不然写出来的代码一堆的bug题意:给你n个数,其中如果x>m,那么之后的d个数就没有作用,问你得到的和最多是多少思路:一开始以为是dp,然而并不是,直接贪心就可以过了,对于a[i]>m的数放在一个数组里,其他数放在另一个数组里,从大到小排序,求前缀和,分别为a[i]和b[i],之后就是贪心的过程了,假设你可以用i个大于m的数,那么就意味着,你用去了day=(i-1)*(d+1)+1天,为什么这样写,因为首先可以想到把一个数放到最后,那么就是说你有一天用的单独的一天,但其他i-原创 2020-08-25 17:07:15 · 146 阅读 · 0 评论 -
codeforces1401D dfs+贪心
1401D题意:给你一棵树n个节点,n-1条边,然后给你m个值且都为素数,m和n之间的大小未知,让你对这n-1条边赋值使得这n-1条边的乘积为m个值的乘积,现让你在用1最少的情况下(即为边的值),使得最大,简单的说就是节点1到节点2,3,4…n所经过的路程加上节点2到3,4,5…n所经过的路经加上…n-1到n所经过的路经。思路:简单的说就是如果n>m那么就意味这有n-1-m条边是要被赋值1的,如果n<m,就意味着最大的那条边要多乘上m-n+1条边,这个是对与边的贪心,之后就是难点了,每条原创 2020-08-23 16:33:22 · 227 阅读 · 0 评论 -
cf1367E 思维+贪心
1367E 1900的题题意:给你n个字母,其中仅由a-z26个小写构成,选其中ans个字母围成一个圈使得这个圈逆时针旋转k个位置还是和一开始一样,求你能得到的最大的ans思路:一开始的思路是旋转k个位置后,每个字母的位置还是没有发生改变,那么就意味着,...原创 2020-08-16 17:17:44 · 125 阅读 · 0 评论 -
cf1333C 思维题+前缀和
cf1333C原创 2020-08-16 16:46:55 · 189 阅读 · 0 评论 -
codeforces 1391D 状压dp
待补原创 2020-08-16 16:06:00 · 240 阅读 · 0 评论 -
codeforces1399E1 dfs+优先队列
1388E1 2000的题题意:给你一个具有n个点,n-1条边的树,且每条边都有其权值,你可以对这些边进行操作,比如这条边的权值为w,进行操作之后变为w/2向下取整,问你最少进行多少次操作才能使得从根节点到各个叶子结点的权值之和小于S。思路:对这棵树进行dfs一遍得到从根节点到叶子节点每条边要经过多少次,然后进行贪心,用优先对列来实现,因为他的操作是对w/2,进行向下取整所以不能说直接用经历的次数*该边的权值,会有精度损失。具体实现可看代码,memset是真的比for慢将近一倍#pragma GCC原创 2020-08-16 14:51:40 · 145 阅读 · 0 评论 -
codeforces1398D DP
1398D 1800的题,简单dp,但架不住我dp菜啊题意:现在给你R对红色小棒,对应的长度为ri, G对绿色小棒,对应长度为gi, B对蓝色小棒,对应长度为bi,现在让你把这些小棒组合成矩形(四根小棒),要求为对应的边颜色要一致,相邻的边颜色不一致,问你能得到的最大的矩形面积。思路:一开始想的是贪心,但后来想到了一个反例如下:6 66 65 5 5 5,如果按照贪心的话就是662,但是实际上他最大的面积是564,所以要用dp进行暴搜,然后取最优开个三维数组dp[i][j][k],表示R只考虑原创 2020-08-16 10:56:29 · 173 阅读 · 0 评论 -
codeforces1398C 思维题
1398C 1600的题题意:给你一列字符串,其中的字母在0~9之间,选择其中一个区间【l, r】,使得这个区间内的和等于r-l+1,问最多有多少个这样的区间。思路:这题主要是思路比较新把,或者说我很少碰到这样的题目,就是把求有多少个区间和等于r-l+1, 转化为有多少个区间和为零,那么如何转化呢,就是把之前的该数组所有的数都减去1即可,之后的实现就比较简单了,用一个map就可以,用数组存储是不行的,因为存储不下来,而且ans要开ll,因为最多的区间为(1+1e5)*1e5/2,显然爆了int的范围,血原创 2020-08-16 10:21:50 · 265 阅读 · 0 评论 -
codeforces 1385E 拓扑排序
1385E 2000的题题意:给你一个图,n个点,m条边,但这m条边有些是定向的,有些是未定向的,需要你去决定方向,问你是否能让这个图不形成环,而且要对所有未定向的边定向。思路:拓扑排序可以判断一个图是否是有向无环的,所以可以用到,先对以定向的边进行判断是否已经形成了环,如果形成了环那就肯定不能符合条件,反之,如果未形成环,那么就一定能符合条件,按照拓扑排序出来的顺序,可以用一个数组pos记录,当pos【x】<pos【y】时,即意味着x在y之前就出来了,所以可以加上x->y的一条边是对这个图原创 2020-08-08 10:24:36 · 210 阅读 · 0 评论 -
codeforces 1380D 模拟+贪心
1380D 1900的题题意:给你两个数组,长度为n的a【】,和长度为m的b【】,保证数组内的数字不同,你能进行的操作有两个,op1:选择连续的k个数字,花费x,使其删除op2:选择连续的两个数字,花费y,删除其中更小的一个通过这些操作使数组a变为数组b,如果不能则输出-1,如果能则输出最小的花费思路:这题要注意的主要是爆int范围一直wa6 。首先的思路要清晰,对于数组a变为数组b首先要具备的条件就是b是a的子序列。然后对数组a进行拆分,假设要删去的为(l, r),l和r是不需要删去的,要删原创 2020-08-07 20:41:45 · 157 阅读 · 0 评论 -
codeforces 1375D 模拟+思维
1375D 1900的题题意:给你一个n,然后是一个数组,其中的值为0~n,定义mex为数组中0~n不存在的最小的那个,操作为可以将第i个数字为mex,使得这个数组为不递减的数组,可以证明操作次数在2n次内一定能实现,问你操作次数是多少,并输出相对应的索引,操作次数不要求是最优的。思路:看到在2n次内一定能实现,并且不要求是最优的,可以想到我们一定可以把这个数组变为一个我们想变成的数组,例如1~n的递增,或者说是0~n-1的递增,通过模拟可以知道这两种情况在特定的条件下都是能够实现的。首先当mex=n原创 2020-08-07 20:25:42 · 164 阅读 · 0 评论 -
codeforces 1383B 位运算
1383B 1900的题题意:给你n个数,得分为你选的数的异或和,现在小明和小红进行博弈,小明先手,两人的选择都是最优的,问小明能否win思路:我的想法是看了标程之后做出来的,首先对这n个数进行取异或和ans,如果ans=0那么就意味着,无论两人怎么取,最后的得分都是一样的。然后讨论ans!=0的情况,我们要知道对位的运算,肯定是你取到了最高位的你就肯定获胜了,所以对我们得到的ans进行位运算,从高位开始,如果有高位不等于0,那么对所有的数进行当前所在的位运算,因为只有当前位能对最终的结果造成影响,用一原创 2020-08-07 17:20:37 · 258 阅读 · 0 评论 -
codeforces1389D 思维+模拟
1389D 2100的水题。。。题意:给你一个n表示操作次数,k表示重合区间长度,然后两个区间分别为[l1,r1],[l2,r2],操作为对其中任意一个区间进行增长任意次,增长一个单位ans++,当这个操作完成之后,区间变为原来的,然后进行下一次操作。思路:就是模拟两个区间的重合位置,分两种情况,如果r1<l2,即两个区间没有交集,要对操作次数进行枚举,因为有可能你操作次数多了还不如直接两步一个交集如果r1>=l2,即两个区间有交集,虽然说等于的时候是没有的,但可以看成是有,无伤大雅。这原创 2020-08-02 21:06:12 · 250 阅读 · 1 评论 -
codeforces1379C 贪心+二分+思维
1379C 2000的题吓了我一跳水题一个,起码在2000里面是个水题题意:给你n次操作,m组数据,其中m组数据是这样的,有一个是第一次a数组,第二次及以上b数粗,如果你的操作是对i第一次那么ans+=a[i],如果是第二次及以上那么是ans+=b[i],问你如何操作才能使得ans取得最大值。思路:一开始我的想法是完全背包。。。因为你第二次是无限取b,前提条件是必须先取一次a。然而,然而,这就是一道简单的贪心,因为你最后得到的答案一定是取多次a以及对一个b取多次,所以只需要对a进行枚举,然后就可以得出原创 2020-08-02 20:19:49 · 255 阅读 · 0 评论 -
codeforces 1388D 拓扑排序
1388D 2000的题题意:给你两个长度为n的数组a和b,a表示原始数组,如果对数组i进行了操作,也就是ans+=a[i]之后,如果b[i]!=-1,那么有a[b[i]]+=a[i],让你求最大的ans,并打印出操作序列,操作序列长度为n且各不相同。思路:首先的想法是有点像图论,毕竟对a[i],进行了操作之后a[b[i]]就会发生改变,也就是说这是一个有向且无环的图,为i->b[i]的图,然后对这个图进行操作,对于一个入度为零的点,因为其他操作不会影响到他的值所以可以进行操作,但是对于这个点的大原创 2020-08-02 19:09:09 · 261 阅读 · 0 评论