思维题
文章平均质量分 69
c++;
Brokenrivers
这个作者很懒,什么都没留下…
展开
-
前缀和差分练习
而差分标记的本质是给左端点之后的所有数加上一个标记,再给右端点之后的数减去一个标记。那么我们查看这个点是否被标记,只需要看这个点之前的正标记数是否大于负标记数,如果正标记多,说明这个点被标记了。本题应从区间上每个元素出发,因为一个元素就是一个buff,必须少一个buff才能符合要求,每次会给一个区间的buff加上积分。所以我们可以将标记的区间存下来,并且升序排序,然后每次询问的时候二分查找正负标记数,判断是否相抵消。还有一种方法是将有交集的区间合并,根据右端点排序,然后二分查找这个点是否在被标记区间内。..原创 2022-08-14 03:50:48 · 143 阅读 · 0 评论 -
离散化模板 区间和
本来是个很简单的算法,没打算总结的,感觉随手就能敲,但是最近写的时候发现还是不熟练,偶尔会卡下壳,还是总结一下模板多练习一下比较好。存储所有出现的数,然后离散化,最后前缀和处理。......原创 2022-08-13 16:29:04 · 93 阅读 · 0 评论 -
8.10 线性DP练习
看到子序列和相邻可以想到动态规划,类比最长上升子序列的做法,可以枚举之前所有符合转移条件的状态进行比较然后对值最大的进行转移。但是这题数据量1e5不可能n^2的枚举了,但是发现本题的k很小,想到先用hash存储先前的数据然后由k枚举前面所有符合要求的位置,然后转移即可。想到使用动态规划,设dp[ j ][ i ]表示以arr[j]结尾,且当前元素为奇或偶的最长子段和。求所有子段的最大和。设dp为前n个元素的子数组能否每个都满足题目要求,则当前符合要求子数组和该子数组之前都符合要求,那么当前的数组符合要求。.原创 2022-08-10 21:30:26 · 142 阅读 · 0 评论 -
8.4 思维构造
例如一个序列4 3 2 1 5 4 5由贪心可知必然是一次选择的区间越大越好,所以每次处理一个不包括0的不上升区间即可,因为对一个不上升区间来说,要使其全部为0最多需要操作max(l-r)次,因为比区间最大值小的数消去相当于是免费的。所以统计不上升区间的最大值即可。如果当作图论来看就是,减去给定图的一些节点使剩下的边数为偶数时最小消耗。如果边数本身就是偶数时,就不需要减去了,最小消耗为0.如果边数为奇数时,就要考虑减去奇数条边,且顶点消耗最小。对这种情况由两种方案,...原创 2022-08-04 10:24:34 · 526 阅读 · 1 评论 -
CF构造思维题练习(1200-1400)
大于0条件不考虑n,所以可以把n看作垃圾桶,前面所有的数都倒入第n个元素,假设每个数到第n个数之间都是大于0的,那么我们可以从左边将i值减为0,而n加上i,操作数+i。但是不可能每个数到第n个数之间都是大于0的,所以对之间的0特判一次操作,也就是肯定要分出操作来将0处变为1.因为不管证明操作n之前的元素总和都没变,所以答案就是将所有数减完的操作数sum,加上需要填的0的个数。②n/2为奇数,也很简单,n/2站一位,剩下两个位置,一个留给1不改变最小公倍数,剩下的(n/2)-1刚好站一位。...原创 2022-07-25 22:31:13 · 1085 阅读 · 0 评论 -
CF1694B Paranoid String 构造/子串计数
所以子串s[j-j],s[j-1-j],s[j-2-j]...s[1-j]都可以被消去,此时答案+j,因为以s[j]结尾的子串有j个。也就是说这两个字符无法相消,那么以s[j]为结尾的前部分子串更无法消去此时答案数+1,因为本身s[j]这个字符就可以看作长度为1的字符串。所以不管哪种情况都能变成结尾为s[j-1]+s[j]的情况,接下来继续这样讨论直到消去j前面的所有字符。"在0的左边,且不相同,则可以被0消去。设一个串xxxxx?可以证明,此时以s[j]为结尾的所有子串都会被消去只剩s[j]......原创 2022-07-25 15:22:02 · 335 阅读 · 0 评论 -
H Counting 模拟
有k个人,k个人初始有一个位置。给出t的时间,每一个时间每个人有自己相应的移动。输出每个时间在同一个格子内的人数。枚举时间然后将所有的人按对应的位移变动,统计重复人数即可。这个统计人数我当时没想到什么好方法,肯定是不能每个时间都两层循环遍历求,于是我想到了map,只需要更新每个人的位置然后删除原位置,最后遍历有人的点然后统计即可。但是我不是很理解map的常数,2000的数据量也超时了。赛后看到一个很简洁的解法,我要统计人数,没必要遍历格子啊,直接从人数出发,哪个人在哪个格子这个格子的人就++...原创 2022-05-23 16:35:37 · 97 阅读 · 0 评论 -
CF1659B Bit Flipping 思维/贪心/模拟
CF1659B Bit Flipping - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)初见没啥想法,先找找规律。注意到操作,选中一个元素其他元素反转,设选中的元素操作了m次,总操作数为k,那么当前元素被反转的次数即为k-m。当被反转的次数为偶数的时候不改变元素的值,反转的次数为奇数的时候元素被改变。首先要使字典序最大,就尽量使前面的元素为1.且又因为操作数要尽量小才能多分出一些操作数给后面的元素使他们更可能变为1.由这个贪心策略,所以从头往前遍历序列。如果k为奇数,那么遇到1原创 2022-05-16 23:45:27 · 199 阅读 · 0 评论 -
5月4日 vp训练赛
这场感觉还行,9题出了7题,大概花了2个多小时,剩下的时间都卡在了并查集的那题,还有一个二叉树的好像也不太会,数据结构虽然学完了但是因为一直没用到不会敲了。不过总体写的很舒服,队友也很给力,提供了很多思路和题目的理解。目前我们队的节奏就是先一起开一道题,如果思路确定了,就我去写代码,另外两个人去开另一道,然后我提交完再跟上他们,他们跟我讲题目理解和思路。我觉得目前的节奏就挺合适的,但是我也得继续提高思维和代码实现的能力不能让队友失望。...原创 2022-05-05 00:06:55 · 806 阅读 · 0 评论 -
Codeforces Round #786 (Div. 3) ABCD
这场比赛感觉还行,但是罚时挺多的,多是因为忘记关freopen,然后去搜了搜相关的资料。可以用宏来判断oj的变量,提交oj时会不编译这块。还挺好用的#ifndef ONLINE_JUDGE //freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout);#endif // !ONLINE_JUDGEA. Number Transformation题意:每次给定正整数x,和y,输出整数a和b,使x在a次变为原来的bx原创 2022-05-03 20:21:50 · 461 阅读 · 1 评论 -
21山东省赛DGH
一. D Dyson Box In the only example, the inside of the box is as below, and the bold lines mark the outline of all the cubes.After the 111-st event:After the 222-nd event:After the 333-rd event:After the 444-th eve原创 2022-05-01 19:36:43 · 187 阅读 · 0 评论 -
4月vp训练赛1
目录Problem - 1337A - Codeforces1.简单思维Problem - 1057A - Codeforces思维Problem - 1335B - Codeforces思维Problem - 140A - Codeforces数学https://vjudge.net/problem/CodeForces-1623B/origin思维/较难Problem - 1337A - Codeforces1.简单思维题意:输出满足...原创 2022-05-01 19:29:26 · 236 阅读 · 1 评论 -
4.9 Codeforces Round #781 (Div. 2)和Educational Codeforces Round 126 (Rated for Div. 2) ab
Codeforces Round #781A题意,找出四个数abcd时其和为n,且ab的最大公因数等于cd的最小公倍数既然对每个数都存在解,可以考虑特殊值,带入1,发现ab其中一个为1则最大公约数为1,cd全为1则最小公倍数为1,得到 1,n-3,1,1四个数#include <iostream>using namespace std;int main(){ int t,n; cin >> t; while (t--) {原创 2022-04-10 16:24:07 · 246 阅读 · 0 评论 -
3.31 Codeforces Round #780 (Div. 3)小结
虽然是DIV.3,但是跟上一场DIV.2一样只出了两题。10分钟左右出了A,又过了20分钟写了B,但是有点小bug,又看了遍题目改完了,提交,但是数组开小了re了。加了两拨罚时。比赛还剩一个多小时,而且c题也不难,但是我思路没找对,去用双指针遍历字符串模拟了,而且因为用了getline接受字符串,莫名其妙每次提交的时候会在答案前加个0(答案的初始化)。但我不知道咋改,交了好几发全wa就跑去写D,D想了一会也没啥思路,看看时间不多了又跑回去改C,最后这两题都没出。实际上string可以直接cin输入,而且只需原创 2022-04-02 00:30:07 · 295 阅读 · 0 评论 -
3.24 CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)小结
这次心态给我打崩了,还是不太适应这种偏向数学的思维题,或者说还是太菜了。确实还得多练练。这次只出了,一道A(还因为设置无穷大的值太小卡了好几次),第二题公式关系一直推错。别的题基本没时间看,挺受打击的。因为赛后来看这两题真的不难,卡了一个多小时真不应该。A题大意是,对一个给定长度为n的数列a,必定存在一个数对<i,j>(1<=i,j<=n)使a[i],a[j]对任意k(1<=k<=n)都满足其中,i 和 j 可以相等找出其中一个满足这...原创 2022-03-25 15:42:16 · 548 阅读 · 0 评论 -
Codeforces Codeforces Round #778. C. Alice and the Cake 模拟+优先队列
目录C. Alice and the Cake题目大意:思路:代码实现:C. Alice and the Caketime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputAlice has a cake, and she is going to cut it. She will perform.原创 2022-03-21 23:23:19 · 797 阅读 · 0 评论 -
14.细菌的繁殖与扩散 数组练习题
在边长为9的正方形培养皿中,正中心位置有m个细菌。假设细菌的寿命仅一天,但每天可繁殖10个后代,而且这10个后代,有两个分布在原来的单元格中,其余的均匀分布在其四周相邻的八个单元格中。求经过n(1≤n≤4)天后,细菌在培养皿中的分布情况。输入输入为两个整数,第一个整数m表示中心位置细菌的个数(2 ≤ m ≤ 30),第二个整数n表示经过的天数(1 ≤ n ≤ 4)。输出输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在培养皿上的分布情况。原创 2022-01-05 12:11:10 · 471 阅读 · 0 评论