- 博客(305)
- 收藏
- 关注

原创 The 2020 ICPC Asia Shenyang Regional Programming Contest I题 Rise of Shadows(数论)
题目链接题目大意:一天内有H小时,每小时M分钟,时针分针以恒定速率旋转。现在若时针分针的夹角<=α,则该时刻的分钟是贡献分钟。现在要求解一天里面的所有贡献分钟。分析:计算两个速率V1 V2,枚举小时【0,N-1】计算该小时内的有效分钟,显然是圆上弧长有一定关系,不妨写出如下暴力for(int i=0; i<n; i++){ for(int j=0; j<m; j++) { if(abs(m*i+j-n*j)<=k)
2021-07-19 17:04:40
1718
1

原创 Omkar and Circle CF1372D 题解
Omkar and Circle CF1372D裂开 ,想了好久怎么用线段树维护 QAQ 后面开始质疑这种解法了瞎写了一波线段树WA4 因为每次相邻元素相加我给标记了下标 但是如果值的次数出现大于1 就很有问题了 所以这显然行不通了打了一下午CF(corss fire) 再打CF(codeforces) - - 脑子更不好使了因为每次我们都是把a[i] 的相邻的值删掉 然后把和覆盖给a[i] 那么不妨自己画画图体会体会 ,显然按照每次覆盖掉最小值是可以得到题目要求的最大值但
2020-07-12 02:14:59
271

原创 Codeforces Round #643 (Div. 2)题解
Codeforces Round #643 (Div. 2) 传送门 传送刷题openA Sequence with Digits 水题暴力构造就好了 搞出一个0就输出就行 题意要求 元素x 加上 她的最小数位*最高数位 只要最小等于0 就会一直0#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f#define mods 1000000007#define modd 9
2020-05-16 23:31:40
373
2

原创 Codeforces Round #641 (Div. 2)ABCD题解
A题:Orac and Factors 链接传送门水题 分类讨论a是奇数/偶数 操作就行了 奇数的话对a求因子 算贡献 代码如下ll a[manx]; int main(){ ll t=read(); while(t--) { ll a,b; a=read(); b=read(); if(a&1) { for(int i=2; i<
2020-05-13 11:04:15
933
原创 GESP等级考试3级真题题解(持续更新中)
先求出最大值,最小值,其实不建议sort,因为sort的时间复杂度是O(logN*N) 直接条件判断求最大值最小值是O(N) 伴随输入数据。因为要满足两个长度至少为2的回文串,所以同学们枚举的分割点的时候一定要保证分出来的两个串长度。先标记200000以内的完全平方数,注意0也是,然后枚举所有的数字来检查。这其实就是字符串问题里面的经典问题,按字母表循环移位,注意先对N%26。观察N不是很大,可以直接枚举答案,然后按题目规则去检查行不行。数组的桶用法,把每个存钱的地方看作是桶。最后判断,输出就行了。
2025-03-16 11:23:22
375
原创 GESP等级考试4级真题题解(持续更新中)
你可以先排序,排序后,你拿走的一定是一个连续的区间段,只要满足这一段里面最大值减去最小值满足题目要求就行了。子矩形的第 2 行和第 3 行,只有第 1 个和第 4 个格子是白色的,其余格子都是黑色的。现在我们来枚举每个小矩阵,然后把刚刚的检查代码融入进去,但是有个问题要注意,现在枚举的小矩阵它的行列不再是1–4 ,不过你可以用另一个变量来检查。是否出现,因为有可能是负数,而数组标记不能放负数,所以我建议先判断该数字是否为负数,因为题目它保证每个值都要为正整数。,因为长宽你都知道,所以这个矩阵的行是从第。
2025-03-16 09:05:07
1037
原创 思维训练7题解
注意当两种方法都可以满足题目意思的话,你要取最小的那种方法,让A的值尽量小还能满足要求才能使得后面的A有更大的发挥空间。今天又是读题困难的一天,题目读不懂要多看看,结合样例。索引一般指的是下标,就是对于这个下标范围满足什么情况。其实就是阅读理解,读懂之后很好做,来说要么维持自己不变,要么就用。一定要在做题的时候学会读题,今天顺带还复习了一下前缀和。的选择可以是任选一个。
2025-03-02 10:57:40
870
原创 寒假集训思维训练6
这个题我们直接枚举在哪两个位置放加湿器,然后再去检查其他所有的可以的地方,能不能加湿就行了。直接枚举每个/的位置,然后倒着算该符号左边有多少个连续的1,右边有多少个连续的2 ,取最小值即可。根据这个曲线,我们很明显要找到第一个能吃这个寿司的人,也就是第一个 A值 小于等于B值的人的位置。值 那么这个人就是要吃寿司的。很明显,当从左往右的人越多时,前缀当中的最小A值曲线就会降低。而我们每个寿司需要满足,它的B值>= 某个人的A值 才能被吃掉。,但是注意,不能减为负数,然后把这一次操作的水加进来。
2025-02-11 14:41:54
671
原创 寒假集训思维训练5题解
即先按做题得到的总分排序,如果总分一样的两个人,按做题的题目编号来排序,类似于如果小明做了ABC题得分 跟 小刚做了BCD题一样,那么按字典序来排序的话(字典序指的是,两个字符串从前往后做比较,谁第一次比另一个小了,谁的字典序就更小)。如果两个字符串长度一样,我们可以依次枚举每个位置的字符来检查,看看是否至多只有一个位置不一样,因为如果有一个位置不一样,我们可以修改。所以这个题首先我们得记录所有可能的做题情况,即对于5道题目,所有的做题可能,都要枚举出来,存下来。的灯都有可能选,接下来枚举间隔。
2025-02-11 13:38:51
878
原创 寒假集训思维训练4题解
其实,我们可以想一下,如果曼哈顿圆心所在的位置的那一行,水平方向肯定是直径,那么水平方向的#肯定也是最多的,同样的道理,竖着的方向也是#最多的。接下来我们来想一想三维空间中,限定一个盒子,限定物体的体积V,有多少种可能的方法?首先想一想平面上,一个面积为X的矩形,在给定的。,那么把某个矩形放到范围中来看,它其实可以通过平移的方式,去占据不同的位置。计算第i个任务开始的时间与前一个任务结束的时间中间的时间间隙。个时间段,题目比较贴心,他已经按时间线顺序给出的。轴,其实也是类似于刚刚的计算方式。
2025-02-10 14:42:22
1000
原创 寒假集训思维训练3题解
首先要把题目读懂,意思就是有几个操作,放蛇进来,让最前面的蛇出去,以及查询第K条蛇的头是哪个位置。所以我们只需要计算历史以来,所有蛇的一个长度前缀和,以及所有出去的蛇的长度,相减就能得到目前我们排队中的蛇的长度。开辟一个新的位置,让新来的蛇排队进去。现在要算它的头位置,其实就是算它前面所有还在排队的蛇的总长度。这是一个经典的二分查找某个数值第一次出现的位置的问题。来记录当前还在排队的蛇,所在数组的哪个位置,用。条蛇的头坐标其实是前一条蛇的尾巴,所以我们要去算。题目想问,当前在排队的第K条蛇的头位置在哪?
2025-02-10 14:13:43
670
原创 寒假集训思维训练2题解
我们可以先考虑把固定的# 最上方所在行,最下方所在行,最左边所在列,最右边最在列找到之后,这四条边就是矩形。现在要检查这个矩形 到底行不行,直接枚举矩形内部是不是存在白色,如果有,那么就是NO。即编号为P的鸽子所在的窝的数量要减少1,编号为H的窝的鸽子数量+1. 一加一减的过程中会产生影响,就是窝里面鸽子数量是否会>=2。只需要把A数组复制一遍,排序,然后检查A数组是否要交换一次,有必要的话就交换,换了之后A,B数组对比一样是否一样,如果一样就说明是YES。,一开始每个窝有1只鸽子,
2025-02-08 16:18:27
730
原创 寒假集训思维训练1题解
的排列,因为每个数字只出现一次,所以所有的数字都是众数,然后按A数组的元素顺序,去输出这个排列就行了。如果x轴方向是较晚到达的,即y方向比较早到达,以后y方向的跳跃都是原地跳。生活中的一种现象,透过玻璃去看贴纸的另一面形状,实际上是一种逆序图形翻转,同学们可以自己在草稿纸上写ABC,然后从反面观察一下。步,由于跳一次要换方向,一开始从x轴开始跳,我们可以视“跳一次x,跳一次y” 为一组 ,每一组需要两步操作。这是属于构造题,构造题同学们要思考的特殊一点,往往构造题的方法比较特殊,有规律。
2025-02-08 14:03:21
661
1
原创 8.23CF训练题解
我们考虑倒着处理,先把A[n]存进去,不拆,因为A[n]是最后一个元素,不拆它相当于后方有个较大的。其实最简单的方法就是1–M颜色以此涂色,这样子各种颜色出现的又多又均衡 ,那么另一个人只能选择最多的一种颜色作为最终颜色,其他颜色全部修改。其实这是一个经典的数学思维题 ,飘带有N段,每段可以着色,有M种颜色可以选择,另一个人有K次修改颜色的机会,问有没有方式使得飘带在K次修改后都无法变为单一颜色?我们根据题目的规则来思考,能变成最终一样的,一定能得到首元素跟末尾元素是相同的结论。
2024-08-25 08:53:18
413
1
原创 8.22CF训练题解
个人,那么他前面的人放哪个组是确定的,二分往后面查找什么位置会让编程组或者测试组放满,放满以后只能全部丢到另一个组去了。操作的区间与区间之间不会有交叉部分,那么本题就基本上推导出来了,线性的。否则只能取操作1过程中出现的最接近 第N+1号元素的值再去做加减法。如果一段区间被操作了,那么最终的数组一定是这个区间中的最小值。因为这部分是任意选的,为了让答案更大,对答案的贡献就是。考虑到小写字母的ASCII码都是大于数字字符的。已经选了,这部分选的某个位置对答案的贡献是。,这部分选的某个位置对答案的贡献是。
2024-08-23 11:05:25
477
原创 8.21CF专场题解
那我们发现a的范围是1e6,那么如果C大于最大的ai,那我们可以选择一个最小损失的方案一直执行让他小于最大的ai,小于ai后,这个数据范围可以发现,我们可以利用dp来得到1e6范围的所有答案,那么这道题就完成了。最坏情况是 a + b,然后,考虑 a 是一定要整段出现在答案中,所以只需要枚举从 b 的第几个字符开始匹配即可,如果有 tmp 个字符匹配,答案就是 a.size() + b.size() - tmp。如果不存在这样子的位置,那更好办了,直接输出字符串在末尾补一个不一样的字符即可。
2024-08-22 09:10:55
942
原创 8.20模拟赛题解
B题显然是保证有解的,有解的情况下问最优解,说明翻到满足要求的方案不止一种,我们要找最优解,数据一看很小,应该很容易联想到dfs,把所有方案搜索到然后取min即可 ,可以从第一行开始处理,每个位置攻击还是不攻击,一共有2。整体上来看 ,A题拿满分的同学可能占一半吧 ,这个数据其实是不太理想的 ,说明同学们对于思维模拟题还是不熟练,没抓住题目要分析的本质。C题不会写正解为什么不会写暴力呢?当然这题暴力可以拿70分。训练应该侧重思维,模拟,以及对算法的掌握上。未来不会再放这种难度的套题了 …
2024-08-21 08:55:54
480
原创 8.17模拟赛题解
先考虑空间能不能把N个座位放好 最优的方式就是挨着摆放那么一排能摆放Q=L/x的商个椅子 ,然后计算摆放完N个座位需要多少排,N/Q 向上取整计算所需要的排总共占据多宽,讨论有没有超过W,然后讨论剩余空间还能放几条走廊如果走廊数量为0,那么无解。最后一条走廊理论上可以挨着两排位置,所以说只需要计算理论上最多能有多少座位挨着走廊,然后跟实际座位数取min即可 ,注意一排可能一个座位也放不了,要讨论#include <bits/stdc++.h>#define FIN freopen
2024-08-19 10:38:35
815
原创 一些复习知识
同余还有另外一种用法,某一段区间对一个固定的数字取余数,【L,R】相加余数为M,【L,K】满足K>R 区间相加余数也是M,那么可以知道区间【R+1,K】加起来是整除那个定值的。显然,如果A[i] A[j]余数相同,做减法以后必定只剩下M的整倍 ,所以我们标记每个数字对M的余数,最后再一个一个枚举余数,看看这个余数出现的次数是不是大于等于2。因为底数相同的两个相乘,答案就是他们的幂次做加法,所以说我们把A的B次方看成。举例: 9的15次方=9的1次方* 9的2次方。A B的最小公倍数就是。
2024-05-30 18:49:01
392
1
原创 2024.5.28晚训题解
每次计算答案的时候,查找一下当前三元组前面,有多少个跟自己的二元组一样的三元组,该操作不保证过滤了重复元素。因此我们需要查询该三元组前面有多少个跟自己一模一样的三元组,因为一模一样是不会产生答案的,所以要减去3倍。第一部分完成后,未凑对的剩下来的只能是北/南里面的一种,剩下的我们要考虑能不能均分给两个人,同理东西。接下来分配剩余的未配对的,注意如果剩余奇数个,肯定不能保证最终两个人走在同一个地方。这其实就是个简单的模拟题,你把输入的字符串字母sort一遍,把密码表处理出来。的格子不用说了,啥地方都能放。
2024-05-28 20:22:01
811
原创 2024.5.25晚训题解
你如果要复制回去的话,肯定要从头摆过去,所以说我们直接枚举S的一段前缀字符串,长度为S字符串的因子,然后带回去检验行不行。1e4级别的数字顶多除4次10就要没了,所以说我们DFS深度肯定不会很多,四层足以,每次把当前数字能整除的,拿去除除看。注意还有一种可能,那就是枚举最末尾的那一段,因为它也算是最后被复制的那一段,我们可以利用它,来尝试往前面复制。这里所说的枚举其实可以更优雅一点,用DFS去搜索,看看给出的数字能不能凑出来。题目所说的这种字符串,首先可以从长度分析,这种字符串的长度必定是S的某个因子。
2024-05-25 20:30:00
516
原创 2024.5.22晚训题解
匀速运动的时间=一小段路程/(区间距离 除以 区间时间) 我们把除法转换一下,把分母的除法乘上去,变成 一小段路程*区间时间 除以 区间距离 这个公式就是我们的匀速运动的时间,不整除也没事,反正不整除的部分也不考虑,因为答案向下取整,所以本题算时间得这样子算,注意long long。在哪,用匀速运动算出那一小段时间,再加上前面的即可。我们考虑标记,按二进制位进行映射标记,把除了前两位,其他位一样的数字标记到一起,他们内部可以任意交换,为了使得最终数组字典序最小,那肯定是小的摆前面去。
2024-05-22 20:30:00
845
原创 贪心速刷晚训题解
因为有正负的情况,所以要考虑的有点多。因为本题数据较小,你要是考虑不清楚就直接枚举A里面隐藏哪个数,能得到的最大值最小化就行了。肯定是让越磨蹭的人 越靠后,这样子能使得整体上每个人尽量满足 生活常识,卸货也是这样的。考虑多看较短的影片,每个影片有个结束时间,排序,从小到大,开始新一轮的寻找,。直接开始看,能看就多看,这样子是最优的,越靠后结束,你能看的片子就越少。如果K大于等于2,我们可以先选N,然后补齐小于N的部分的所有的2进制位。直接排序,如果中间点是等于的状态,就会有不确定的对局,这是不行的。
2024-05-21 15:15:57
385
原创 2024.5.17晚训题解
根据这个思路我们就去记录,到达每个点走了多少步操作数。这里涉及到坐标的印射,最好使用pair<元素类型,元素类型>+map 去映射 ,pair<>记录的就是二元组,我们可以映射map<pair<元素,元素>,元素> vis ,使用的时候就是vis[make_pari(a,b)]=?,所以我们的策略是每次拿全部大于等于10的整的部分去买东西, 去算返现,把个位留着,加上返现进行下一轮计算。注意如果是全偶数或者N个数全是奇数但是加来的和是偶数,这都是变不出来的。实际上你会发现,如果你每次都全部拿去买东西,
2024-05-17 10:28:50
350
原创 2024.5.16晚训题解
我们的优先队列里面存的元素,其实是会内部排序,top一定是最小的,拿出最小的以后又会调整,始终保证我们放进多种组合价值后top还是当前最小值。你可以想象类似于BFS,起始状态是0,每次搜索N个菜拿走,每次从最小的价值组合继续搜索,因此第M次一定是第M小的组合。找到连着的两个T,把他俩变成PC,要求变得尽可能得多,那肯定从左往右碰到俩就变俩,这样能变出来最多的。小的组合,下一轮循环以此类推,这个快速维护最小值,以及去重操作,其实就是优先队列+set的操作。临近比赛,晚训更加频繁了,希望同学们继续坚持下去!
2024-05-16 14:46:01
317
原创 2024.5.15晚训题解
实际上就可以用v[j].push_back(i)来搞定,输出同理,排个序就完事了。跟温州市赛那题毫无区别,这题甚至还给了旋转公式,代码就不放了。对于操作1和操作2,我们可以开个vector数组,那么把数组。数据范围很小,可以直接枚举(s, t)的所有组合,判断即可。对于操作3来说有排序和去重操作,所以我们可以用set维护。直接枚举各个长度的十字架就完事了。当然码力弱的人未必能写。这场看起来相当暴力。
2024-05-15 18:59:53
356
原创 2024.5.14晚训题解
枚举26个字母,判断两个字符串关于这些字母的数量是不是一样的,如果不一样,那就要用@来变,如果变不出来那就是No ,注意变了以后现有的@数量要对应减去。我们先计算出串的最小值,枚举一遍串,先算出定值(已经固定数字的位置),然后根据贪心的思想,从最高位开始向低位枚举,寻找?根据二进制的规则,0111111111111 这个数字 +1 构成逢二进一,才能变成 1000000000000,所以说一个高位的1,比它后面所有低位都放1 是还要大的。例如(1<<0) 表示把1的二进制整体左移0位,相当于不变。
2024-05-14 20:30:00
700
原创 2024.4.14第二次阶段性测试
两个字符串修改成一样的,会有一个花费,这个花费说白了就是字母的间距,因为题目不允许成环状修改,所以我们一个字母变成另一个字母的花费就是它们之间的间距。总的来说,最近半个月不上课不晚训,很多同学啥也不做不练,二分也没学好,甚至连基本的模拟题都不会写,如果以这种状态继续学下去,那你只能仰望同班同学了。,那么一个矩阵的规模也就40000,我们枚举每个点,每个点需要计算一遍左右对角线,也就是至多。,只要是变成这俩字母中间的任意字母,其实花费都是一样的,因此我们直接把。个点,不过题目也保证了,所有T组数据里面的。
2024-04-14 11:42:47
1088
原创 VJ二分专题题解
如果这个数目大于C头牛,说明我们这个间距是可以的,我们考虑扩大间距继续二分;然后我们不断的计算相邻牛栏的间距并求和,当间距>二分答案时,我们必须在当前牛栏放一头牛了,否则间距会超过我们二分的答案。都减去x以后然后求和,如果求和大于等于0,说明这一段的数平均值是大于等于x的,这就是核心的check思路,我们不要关注这个平均值到底由几个构成。这题的意思是说,有N个位置的牛栏,但是牛会打架,所以一个位置只能放一头牛,现在想问放进去C头牛,使得所有牛之间的间距的最小值尽可能地大,是多少?
2024-04-10 10:39:15
969
原创 【入门】二分答案题解
考虑二分跳跃距离x,直接从左往右枚举石头,计算出相邻石头的跳跃距离并求和,如果该求和距离<x,我们记录石头数量,因为这些石头都是需要被搬走的。如果最后一段一直跳跃到终点,距离和还是<x,那么需要再搬走一块石头,相当于把上一次的落脚点石头直接移除掉,这样子一步跳跃到终点,满足了“跳跃距离至少为x”如果在当前答案下,段数小于M,说明我们的二分的答案比较大,我们尝试缩小答案;直接二分答案,对于答案而言,代入回每段木头check,利用整除就能计算出某段木头能切割出多少。二分答案,表示某一段和的最大值x。
2024-04-07 10:19:59
313
原创 【整数二分】难题选讲
其实就是从左到右的一个过程,每次拆完数字以后,计算出这一段数字有多少个,我们当前的总长度+1就是本段数字的起点位置,当前总长度+当前段的长度就是本段数字的终点,因为前面也有很多段数字。我们对录取分数线排序一下,为了更好地明确范围,我们把原本录取分数数组两端新增两个值,一个极小值-1e9,一个极大值1e9,然后二分查找录取分数里面小于等于当前估分且最接近当前估分的录取分数的位置。因为本题估分可能超过录取线,也可能低于录取线,总之差的绝对值就是不满意度,为了计算某个估分的不满意度,实际上我们需要两个分数,
2024-04-06 10:18:30
767
原创 2024.4.2abc晚训题解
数组相当于是睡眠的记录数组,偶数位置是开始睡觉的时间,奇数位置是醒来时间,我们可以考虑记录一个睡眠累计时长的前缀和。数组中(最接近的不大于的元素位置),有了位置就可以考虑利用前缀和处理。简单语法题,输出有点小技巧会方便点,像一般遇到环状的数据,我们考虑把数据从0位置存入。因为差至多为D,而且还要加起来的和尽可能大,实际上最优的答案对于。每日积累的知识,每天放弃的娱乐时间,势必化成我前进的力量。我们把它当成检查的判断,对排序(从小到大)后的。要么是醒来的时间,要么是睡觉的时间点,饼干矩形的哪一个角。
2024-04-02 22:00:00
608
原创 温州市第一届青少年程序设计竞赛(小学组)题解
例如题目询问第Q大,我们就按每个位可以选择的种数,将Q拆解成某个进制,利用进制的思想,0表示该位置最小的值,1表示该位置上能摆放的次小的值…其实题目已经保证一定有解了,那么依次旋转矩阵,然后按照同行递增,同列递增的规则判断验证一遍即可,注意如何写矩阵的旋转。可以取,两者取最小值,就是可行解的个数。简单的条件判断题,注意判断三角形类型,再判断是否等边等腰。非常经典的进制思维的题目,与这一题如出一辙。规模的矩阵,两种填法有多少个格子的值一样。第一种填充方式对于第。列的位置的数字来说,列的位置的数字来说,
2024-04-01 18:43:58
1553
原创 2024.3.28abc晚训题解
当我们遇到右括号时,判断前面有没有能用的左括号,如果有那么就不断删除数组尾部的字符,直到我们遇到左括号,也要删除,并且左括号数量-1.如果前面没有可以用的左括号,那么就把右括号也存入数组尾部。题目的F(i)函数指的是值为i的数字出现的第二次的下标 ,排序所有F(i)以后依次输出对应的i。如果吃了,那么第i天一定会是无毒的,考虑dp[i][0]可以由昨天怎么变过来?对于第i天的菜如果是解毒的,考虑吃还是不吃的问题。我们考虑第i天的状态,要么无毒要么中毒了。对于第i天的菜是有毒的,考虑如何吃的问题。
2024-03-28 23:00:00
431
原创 2024.3.26abc晚训题解
如果我们以x作为答案代回去检查,那么对于第x天还在吃药的情况,计入吃药的数量,判断最终吃药的数量是不是小于等于K,如果是,说明我们这个答案是可行的,但是我们要找更小的答案,所以我们把答案范围缩小。那么由某个位置pos构成的MEX字符串有多少个就很好算了,直接pos前面M的数量*pos后面X的数量就是由该位置的E组成的MEX总个数。旋转矩阵的外围一圈,写法也挺多的,简单点的思路就是用一个数组把外圈存起来,然后依次控制顺时针摆放回去,考验同学们指针控制的能力。每天吃的药的总量,很明显,是一种单调不递增的序列。
2024-03-26 23:30:00
411
原创 2024.3.24阶段性测试题解
当然有同学好奇这样子转移,是如何做到"移除第一项或者最后一项 的" 我举个例子 1 1 1 1 2 3 4 5 从左到右依次对应的L[i]就是1 1 1 1 2 3 4 5,所以说如果存在a[i-1]与a[i]无法衔接的情况(因为衔接起来会导致当前L[i]>a[i]) ,但是上一步至多是持平的,所以说如此转移。枚举制作i=0~i=A_max道A菜,然后枚举N个原材料的消耗,A的材料消耗了以后用剩余的材料去看看最多能计算多少个B菜,然后A的数量+B的数量就是总数,对总数取最大值就是我们最多能做的总菜数。
2024-03-24 10:05:15
1094
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人