- 博客(9)
- 收藏
- 关注
原创 【2025蓝桥省B基础题题解】
思路:我们首先对数据预处理,都变成其平方,然后进行排序,(越靠近的差值越小),利用双指针,枚举每一个长度为m的区间,这里面的区间取min,即为我们的答案。总结规律为:2^(n/2)%1e9+10 即为答案,所以对于题目,我们只需求出 2^1012%1e9+7。思路:通过观察可以得到,除了1以外,其他的正整数都可以被分解成 -1 0 1 2。-2 -1 0 1 2 3 ...的形式,所以答案为除了1以外的正整数个数。9-4+16-9=12 ==>16-4 (最大值-最小值,中间值会被消去)
2025-04-14 00:39:20
381
原创 栈和队列基础
具体步骤为:用i代指入栈序列a[i],j代指出栈序列b[j],初始都指向1, 首先入栈第一个元素,然后再判断s.top()是否和b[j]相等,如果相等则出栈,j++,直到s.top()和b[j]不相等为止,不相等则继续入栈。题目大意:定义一行小行星,每个小行星的数组元素的绝对值代表每个小行星的重量,如果是正数则是向右运动,负数则是向左运动,如果会发生碰撞,绝对值更大的会把绝对值更小的行星撞碎,绝对值相同则都被消灭,给定一个数组,输出最终留下的小行星的序列。当访问元素时,具有最高优先级的元素最先删除。
2025-03-19 13:11:09
985
原创 快速幂求解
但是问题又来了,int 最多存2^15,long long 最多存2^31, 即使是最小的2^(10^8)也不能被存储记录下来,所以,快速幂的题目一般都是会让我们求a^b后的余数,即 (a^b)%p (p的范围为(0,2^31))我们可以在算出结果a^b后再%p来求得结果,但是a^b的结果一般十分巨大,不能被存储下来,上述方法的时间复杂度为o(x),而且当res>2^31时,最后结果不能被输出表示出来。快速幂的过程转换为在求每个数的二进制时,进行2^n的相乘。举个例子: 9的二进制是 1001。
2025-03-08 22:55:34
503
原创 常用的素数筛法
素数:如果一个数只能被1和自身整除,那么这个数就叫做素数合数:如果一个数除了被1和自身整除,存在其他数也能整除这个数,那么这个数就叫合数样题:将1~n之间的素数筛选出来,并一一输出时间复杂度为o(n^2)设想,如果我们想要筛出1~10^8以内的素数,那么这种朴素的方法不能满足我们的要求,我们继续优化。
2025-02-28 21:46:16
788
原创 枚举和模拟
(1)定义:一种基于已有知识来猜测答案的一种问题求解方法(2)思想:/*不断猜测,从可能的答案中一一尝试,然后再判断题目的条件是否成立注意事项:例:找出1-100中最大的质数(1)确保答案正确性:1.找对答案集合--->(1,100)2.答案成立的条件--->最大的质数(2)提高找答案的效率:1.缩小答案枚举范围(50-100)2.选择合适的枚举顺序--->逆序*/基本题意:/*给定一个x,y坐标轴,平行于坐标轴水平铺设地毯。
2025-02-27 12:54:44
841
原创 二分算法(下)
跳石头游戏,首先在一条笔直的河道上的首尾两边各放置一个石头,在它们之间放上N个石头,每个相邻的石头之间的距离为一个跳跃距离,为了加大比赛难度,组委会至多在N各石头当中搬走M块,求至多搬走M块石头(搬走<=M块石头)后的最短跳跃距离的最大值。2.由题目分析可得跳跃距离的区间范围是(1,L)(L为初始两块石头的距离),二分区间范围来求取结果。首先我们假设mid就是我们要求的最短跳跃距离,由mid反推M,<即在mid的条件下,如何求M>,如果sum(我们反推的M)<=M,返回1,反之,返回0。
2025-02-26 13:46:31
384
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人