自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 codeforces round 956 div2

思路:我们现在思考一个这样的问题:交换相距任意长度的元素是否都可以通过交换相邻元素实现,答案是一定的,自己模拟一下很容易就可以证明。对于一组没有重复元素的序列,我们每一次交换相邻元素都会让该数组的逆序对数量 + 1或者 - 1也就是说,我们每一次操作都会使得ab两个数组逆序对数量的差值不变,或者减2,或者加2,如果我们可以让ab两个数组的逆序对数量相同,那么ab数组就可以相互转换,也就是如果ab逆序对数量和为偶数,数据就是合法的。思路:贪心的从第一行第一列开始构造出和b一样的数组,如果构造完后a!

2024-07-09 11:11:50 390

原创 codeforces round 953 div2

思路:不难发现,假设最开始我们的答案permutation与原有序permutation一致,此时如果交换相邻元素会使得最终结果add 2如果岔开一个交换会使得结果add 4...类推后发现交换i,j号元素会使得结果add 2 * (j - i)。因此在构造序列时,我们可以先从当前可以选择交换的最大值的开始构造,即先交换可以交换的最远距离,若第一次交换i,j那么第二次的交换区间就变成了在(i +1)到(j - 1)内重复第一次交换的操作。注意,这里只是感性的理解,并不是理性的证明。

2024-06-18 10:44:37 389

原创 codeforce round951 div2

思路:对原操作进行化简,实际上就是把前p个字符翻转,并且接到原字符串的后面,则此时我们的答案串实际上是已知的如果第p个字符是1,那么答案串就是以1结尾的k pop串,反之则是以0。结尾的k pop串,既然答案已知我们遍考虑枚举p,之后在o1内用哈希字符串比较。由于分数的精度不好计算,因此考虑乘上所有k的lcm。这个是判断条件,如果成立给每个1/k乘上lcm即可。思路:guess题,就是求两个数的lowbit。即 lcm * sigma 1/k < lcm。变形后有sigma 1/k < 1。

2024-06-10 18:34:17 350

原创 codeforces round950 div3

思路:维护两个点集,第一个点集表示最开始a[i]与b[i]不同时b的值,第二个点集维护在进行操作时,操作到不在b[i]中的点,也就是对答案一定没有贡献的bad点。在操作时,如果操作的数值在第一个点集中,这时候把该点集中的点erase掉,如果出现了bad点,则加入第二个点集中,如果出现了在b中的点,并且第一个点集中没有了,则把bad点集清零(假设当前操作在为b[i],前面所有的bad点都可以操作在这个位置上,反正最后这个点还会变成b[i])最后如果两个点集都被清空了,则说明合法。

2024-06-04 20:21:18 408

原创 codeforces round 949 div2

对于这种解法的正确性可以考虑一颗二叉树(父节点u 左子节点2u 右子节点2u + 1),有两个节点,两个节点不断除2最终一定会到他们的lca上.从x自增到y,发现x,y最左边两位是相等的,因此这两位相等的位只有为1时才会对答案产生贡献,这两位其他位会从小的不断自增到大的,因此这些位肯定会出现1,因此答案就是从左向右拆位直到找到第一个不同的位,这之前只有1对答案有贡献,这之后都对答案有贡献。思路:实际上就是求一个区间内的or值,区间为max(0, n - m), n + m。当然也可以直接输出_lg(x)

2024-06-03 17:45:22 536

原创 codeforces round947 div1 + div2

思路:任取数组中连续三个元素,根据定义,这三个元素最后会被变成这三个元素中的中位数a。则此时存在两个连续的a。顺着连续的a向左右两侧,每次选择两个a以及相邻的一个元素进行操作,最终数组都会变成a。注意,当n=2时没有三元组,此时答案为两个数中的较小值。思路:sort一下数组去重,最小的元素肯定是答案之一,紧接着遍历数组,碰见第一个不能被最小数整除的将其加入答案集合,若碰见第三个不能被当前答案集合中任意一个数整除的数,则数组不合法。思路:可以想象原数组为一个环,如果在环中可以找到不降序列,则满足题意。

2024-05-26 17:17:07 299

原创 codeforces round946 div3

思路:分别考虑竖直方向水平方向,以水平方向为例,出现ew可以抵消,若最后剩下的e或者w为偶数个则合法,另外还要判断H,R是否执行了至少一条指令例如WE这个条件是非法的,原因是肯定有一个机器无法执行命令。这里代码写的很繁琐,写完比赛就结束了,抽时间改一下。思路:背包,dp[i]表示当前happy值为i,可以拥有的最大钱数,从大到小枚举是为了让状态转移时用已经搜过的状态转移,最开始把不可能的状态置负无穷dp[0]置0,这样搜出来的方案一定是可以实现的,dp时每个月记得加上工资。

2024-05-23 12:36:25 407

原创 codeforces round937 div4

这时候可以考虑状态压缩dp,用二进制数表示出所有状态,2^18并不是一个很大的数,不用担心mle的问题。我们往序列后添加歌曲的条件是添加的歌曲与序列最后的歌曲音乐类型与作者是否相同,因此可以给dp数组再加上一维,表示目前状态最后一个歌曲的编号,如果i号歌曲在01串对应的需要为0,并且该歌曲与末尾歌曲可以匹配,那么此时i与01串对应位置要置1,并且数组二维下标要变成i。注意,多次比较字符串的操作较慢,最后会t33,这里可以先对字符串进行预处理,或者把字符串映射成数字,第二种操作类似于离散化。

2024-05-22 15:22:50 268

原创 codeforces round944 div4

赛时一直想着排序了,由于最开始没注意到排序本身就是tle的,在写的过程中发现每次还要将首位元素删去,其实在这里应该想到堆的,但是我一点没往这里想,甚至还加了个数组idx表示当前的下标,第一次交发现越界了,原因是idx数组下标最大值是1e9 / 4,数组开大又会mle,甚至加了个离散化,最后提交上去果然tle,遂想到了堆,浪费不少时间。思路:把圆看成一条链 任选两点ab,再选两点cd,如果cd满足其中一点在区间ab内另一点在区间ab外,则两绳一定相交。不会处理精度...待补。思路:顺着题意写就行。

2024-05-14 11:12:26 331

原创 codeforces round943 div3

思路:这道题挺抽象的..相信很多人都能想到前缀和优化异或,然后就不知道怎么处理了...根据异或性质如果有五段分别为x x x x x由于x ^ x = 0, x ^ 0 = x,因此所有奇数数段都可以继续合并成3段(x ^ x ^ x = x | x | x),同样的,偶数数段可以继续合并成两段,因现在只需要判断是否可以找到合法的两段或者三段。思路:二分 + 字符串处理 字符串处理在check中比赛时忘了kmp怎么写了,写的暴力tle了....问题:为什么会爆long long?这两段代码有什么区别?

2024-05-07 16:06:59 408

原创 codeforces round 886 div4

problem:最开始处理的时候并没有考虑到最后建起的图可能不是连通的,也正因为可能存在多个图,边必须要加成无向边。思路:如果两个点有关系就在这两个点之间加一条无向边,最后再bfs扫图,判断是否存在冲突条件。思路:找到a + b a + c c + b中的最小值并判断是否大于10。问题:二分条件为sum <= c的代码仍然wa中...思路:找到长度不超过10的质量最大值对应人的编号。思路:找到每个点的约数并判断该约数是否可以达到。思路:排序后用n减去最长的平衡的一段。带权并查集 差分约束待补....

2024-05-04 17:11:51 378

原创 code forces round898 div4

(如果B位于字符串开头,那么可以认为这个位置的B可以向左移动0个位置,字符串末尾的B同理,因此这种思考方式是合法的)用于B只能在A上移动,因此最终获得的硬币数量是A的总数减去任意一段A的数量,显然,最大值就是让sum A - A数量最小的一段。那么如何处理呢,维护一个start指针,表示h数组的首位置紧接着枚举指针i表示start之后的位置,依次判断start指向的元素是否可以整除i指向的元素,如果可以整除start到i之间的所有数加1,(这是差分可以处理的经典问题),反之则让start指向i...

2024-04-28 23:19:24 347

原创 codeforces round929 div3

问题:在最后判断r与r + 1哪个更加合适的时候,最开始写的判断条件一直是a1

2024-04-25 11:26:24 1090 1

原创 codeforces round933 div3

这明显是一个线性dp,设dp[i]表示第i个格子的价值的最小值,并且dp[i]可以从前i - d - 2 ~ i - 1个状态中的最小值转移过来,求固定长度的区间中的最值,这道题就变成了单调队列板子题...问题:在取模操作求可能持有球的球员过程中,由于球员是1到7的,因此可以让第一个持球的球员本身编号 - 1这样的取模操作的含义就变成了传球后持球球员距离0的距离,最后输出的时候再+ 1就输出了编号。代码也可以写成一个循环,如果碰见子串map, pie ans ++ mapie ans --

2024-04-22 19:46:25 413 1

原创 codeforces round918 div4

.’由于题目所给字符串合法,因此CVC后一定是C 先找出所有的类似CVCC的结构并在第二个C上做标记这个标记表示辅元辅音节,第二次遍历时如果碰见V如果这个V后面的C没有被标记则说明这里的V是辅元结构应该标记。如果存在 s奇1 - s奇2 = s偶1 - s偶2 == s奇1 - s偶1 = s奇2 - s偶2 则满足题意 可以用map存所有的s奇 - s偶 时间复杂度O(n * log2n)问题:在离散化二分时,由于要把离散化内容控制在1到a.size()范围内,代码一直报错,明天补题....

2024-04-19 21:30:12 307

原创 codeforces round938 div3

由于在维护时只要是在map中的元素都会对答案产生贡献,因此窗口中不会限制有贡献元素的数量,所以窗口中可能会出现有1, 1, 1此时只能算两个1)思路:可以发现,只有4会影响从右向左数第三位数位中1的数量,因此这个可以拉出来单独讨论,剩下的第一位数位中1的数量会被1与3影响,第二位数位中1的数量会被2与3影响因此1,2数位可以用动态规划来求dp[i][j][k]表示1,2,3卡片分别有ijk张时bob赢的最大次数,最后的答案是两部分相加。思路:暴力枚举可能的长度 + 贪心差分判断这个长度是否可行。

2024-04-17 10:20:28 758

原创 atcoder一些题目复盘以及思路

题目大意:对于任意一个数,考虑它的二进制表示,从最低位开始删除连续的零,直到首次遇见1时停止也就说,对于函数f凡是。(该式子括号内容易理解,写出来同余式,移项即可,括号外又mod则是为了处理括号内为。的数的集合,(对于x从0枚举到25一定可以讨论完a中的所有数)那么。具有相同结果的变量其函数值一定相同,于是考虑从。的和那么现在要做的就是如何处理这个和。,遍历数组a,引入数组cnt维护可以与当前。匹配的数的个数,val维护可以与当前。意义下的补数,并且该补数的值为。匹配的数的和,则容易得出。

2024-12-17 10:23:38 311

原创 codeforces一些题目思路复盘

号位为0的话,那么x和y的?号位不同,也就是说,如果在same 1以后的二进制表示位中,如果m中出现的第一个1对应的x中二进制中表示位是1的话,那么我们同样可以将x转化为m,反之就证明当前的y比x要小,不满足题意,这时候我们要考虑是否可以借助一个中间值转化一下,使得这一位的值变成1(借位),借位只能向1借,并且不能same后面的那位1实际上是不能动的,这里可以手动模拟一下,也就是说,如果在same1后面的二进制位到该位之间x二进制表示位为1的话,我们就可以借助这个中间值将其转化为上述的情况。

2024-12-15 21:02:36 695

原创 atcoder abc 382 lazy_tag线段树

现在考虑如何把矩形对矩形的影响表示出来,如果一个长为L的矩形下落,如果可以查询出这个区间范围内当前最高点,那么最高点 - 1就是该矩形的高度,并且该矩形最终会对他本身这个长度区间的最高点产生影响,也需要区间更新的操作,那么区间查询,区间更新,很明显,懒标记线段树。思路:容易得到:寿司会被第一个美食等级小于其本身美味程度的人吃掉,并且,如果后面人的美食等级如果大于前面那个人的美食等级,那么后面那个人将永远不会吃到寿司,因为他能吃的寿司,他前面的一定可以吃,并且他前面的人有对寿司的优先选择权。

2024-12-02 18:19:04 567

原创 codeforces round984 div3

首先翻译一下题目,有一个n * k的矩阵,现在对矩阵的每一列进行前缀or操作(就是说操作过后,矩阵的每一列就变成了从上向下的递增序列)然后给你查询,每个查询对矩阵中的数的大小进行限制,问查询到最后是否有一行满足所有的查询。并且0与1对半分,先0后1,那么只要求出x中包含几个循环节,再求出剩余数的个数,就可以知道每一列中01的数量,实际上,0并不会对xor操作的结果产生影响,因此考虑1的数量为奇数还是偶数...我们可以先封装一个函数表示求出前x个数的异或和,这道题的数据范围很大,考虑这件事情要怎么做。

2024-11-04 11:17:59 530 2

原创 atcoder abc 376

对a从小到大排序,并且遍历a,对于第i个a,就是此时的max,所以现在要做的就是想办法维护出b的sum。对于b而言,我们可以动态的从前i个b中维护k - 1个sum b的最小值,例如此时i对应的b如果大于我们所维护b的最大值,那么不用对其做出改变,相反,如果小于b的最大值,那么我们就可以把此时维护b的最大值删掉,并把此时的b[i]加入到维护的sumb中,易得出,这样的作法得到的sum一定不比原先的大,对于这个维护,我们可以用大根堆维护总共的时间复杂度为。思路:扫一遍bfs即可。

2024-10-21 11:33:21 320

原创 atcoder abc375

思路:图是一个正方形,不难发现,每次操作的含义是将整个图形顺时针旋转90°,并且每操作一次,操作的范围就小一圈。因此我们可以从最外面一圈开始枚举,最外面一圈只会被旋转一次,其次一圈会被旋转2次...以此类推,我们可以轻松写出对于任意点(x, y)在旋转一圈内的坐标变化,接下来要做的就是根据旋转次数n % 4后的值确定每个点的最终位置即可。思路:由于目标串长度只有3,因此此题就是个计数题, 用map来做。对于a[i], 这个点对答案的贡献就是1 ~ i - 2内所有与之相等的字符与其的坐标差之和。

2024-10-13 10:51:02 563 2

原创 codeforces round976 div2

次,显然超时,这时候注意到我们的d很小,公差很小,就意味着每一个点最多与前面的d个点联通。注意到a | b >= a a & c <= a因此不存在借位关系,又因为是减法运算,所以也不会存在进位关系,那么这道题就是位独立的一道题,直接拆位讨论即可。思路:注意到值域最大是1023,并且恰好二进制表示时各个位数都为1,由异或性质得知,最后S的值域也是不大于1023,可以枚举值域,然后用dp计算概率。不难发现,只有当b全部为偶数时,n才为偶数,因为在乘法中只要有一个乘数为偶数,结果就是偶数。

2024-10-12 10:10:54 570

原创 atcoder ABC 374

思路:求最小的最大值,显然二分,二分出答案之后,对于每个i,贪心地使得处理的机器大于二分的值,并且花费最小。这时注意到每种机器处理的数量都是不大于100的,这也就意味着性价比较差的那一台机器最多不会超过100台。思路:注意到n很小,因此考虑爆搜,对于所有的点,枚举出所有的连接顺序,这一点可以用next_permutation很快的实现(注意next permutation枚举的是字典序不大于当前序列的所有排列,因此想要枚举所有的情况,应在最开始对原有序列进行sort操作使得原有序列的字典序最小)

2024-10-09 18:39:37 269

原创 codeforces round973 div2

答案是一定的,如果不是后缀的话那么至少会有一种情况得到的反馈是子串,同样的,在我们找到后缀后,按照同样的方法向前添加字符,就可以确定最后的串,由于我们每次拓展一位最多进行两次询问,因此我们的询问总数不会超过。有了这个性质之后我们就可以执行一个循环,每次循环找出当前最小的gcd值,当我们发现本次循环的gcd与上一次循环的gcd的值一致时就可以break掉,由上述性质可知该循环是log级别的。这里进行一个简单的证明,倘若一个数组中的数足够多。如果存在其他的值只会让这种衰减衰减的更快。即gcd的值最多变化。

2024-09-25 18:38:01 355

原创 codeforces round974 div3 分层图 树形dp

思路:首先注意到这个图只有n - 1条边,并且是连通的,也就是说这是一棵树。如果这是多个连续的被保护的点,这里以两个点为例,对答案的贡献就是gold - c - c其中一个c表示本身被相邻的点抢走的gold,另一个c表示相邻那个点被这个点抢走的gold。思路:分层图,第一层图的边权为均为w,第二层图的边权均为w / 2,第一层图的点i与第二层图的点i + n对应,由于骑上马之后一定比骑上马再下马更优,因此两层图之间用单向边连接,即,如果在点i上有马,那么就在i与i + n之间连一条边权为0的单向边。

2024-09-23 20:39:27 696 2

原创 atcoder abc372 启发式合并, dp

现在考虑如何存数据。可以用并查集合并两个集合,并且在合并的时候一定要将小的集合合并到大的集合中去,因为小集合合并到大集合中,最后的集合一定大于小集合元素数量的两倍,因此合并的时间复杂度不会超过logn。思路:判断当前变化的位置对结果是否会产生影响,在询问前先计算有多少ABC, 每次变换位置x前后扫描一下[x - 2, x + 2]范围内是否有ABC,变换前有让cnt --, 变换后有让cnt ++思路:三进制转换,可以参考二进制,先把当前可以加入的最大的3的幂次加入,这样一定可以凑出答案。

2024-09-22 11:42:19 682

原创 codeforces 972div2 动态规划,记忆化搜索

思路:最开始的思路是预处理分别求出各个字符串中narek分别的数量,然后通过动态规划求解,但是在写的过程的中发现,这样无法处理每读入五个narek分数+ 5的情况,于是改变思路,边扫字符串边dp,遇见narek中的字母让当前分数 - 1如果碰见完整的narek让分数+ 10(因为完整的narek不能算到-1的的分数中去,因此要加10,把减去的分数也加回来)dp[i][当前str的长度] = max(dp[i][当前str的长度], dp[i - 1][j] + scr)如果当前的dp[i][j][k]!

2024-09-20 11:31:31 1204 5

原创 atcoder abc 371

思路:注意到n非常小,因此爆搜。g图中的点以一定结构排列,我们可以枚举h图中所有点以g图为板子的所有排列,例如g图中的第一个点,可以放h图中的任意一个点,之后再暴力枚举某种排列时刻点与点之间是否有边,以此来计算花费。因此只需要记录下某个数上一次出现的位置last,该数对答案的贡献就是(i - last) * (n - i + 1)注意到范围很大有2e9,因此再加个离散化。唯一的坑点就是给定的询问中的点可能没有村庄,特判一下就好。思路:翻译一下题目就是,对于任意一个数,判断该数在多少个区间内出现过。

2024-09-15 21:04:18 562

原创 atcoder abc370(dp,基环树/森林,倍增)

当我们二分出一个值mid之后,我们划分的每一段都不能小于这个值(除非该值本身非法),又由于划分的数量有要求,即k段,因此我们应该贪心的使我们划分的每一段在不小于mid的前提下最小,这样处理完每个点之后实际上会形成一张图,另外,假设i 点最后处理到的点是j点,由于下一次划分要从j + 1开始,因此我们可以直接设置i 点应该跳到j + 1,以此简化处理)dp[0]初始化为1,以后的所有状态都由dp[0]转移, 对于所有小于i的j,如果j,i的子段和不等于k,那么对于dp[i]就可以加上dp[j]

2024-09-11 09:35:35 634

原创 atcoder abc 369

并且不同的连点方式也会对答案造成影响,又注意到k,也就是固定的桥范围不超过5,并且q询问也很小,因此直接枚举所有的连点情况,先枚举桥的顺序,可以用next_permutation枚举,再用dfs枚举桥与桥之间的连接方式。思路:动态规划dp[i][j][k]表示第i个位置的怪物我是选择击杀还是不击杀以及这是我击杀的第几个(奇数个,偶数个)怪物。以及在最开始dp[i][1][0]可能不会出现,因此要判断dp[i][1][0]之前的状态是否出现过。思路:贪心的将手的初始位置设为第一个键位所在的位置。

2024-09-01 11:28:39 420

原创 codeforcese round 957 div3

思路:对于每个数x拆成x个1要x - 1步,合并要x步,因此一个数x的贡献就是2 * x - 1。思路:要尽可能的往木头上跳,如果不能跳到木板上,那么就按跳的最大距离跳到水中,游到下一个木板,并在这一段游泳的过程中判断是否遇到鳄鱼,以及游泳距离。怎么这两段处理交叉,或者不交叉的情况,开个st数组对序列判重,先输出n 到 k,再输出没有被判重的代码块,再从1到m中输出没有被输出的。没申请留校,恰好碰见宿管巡楼,把隔壁寝没申请的留校的宿舍给一锅端了,吓得我直接关灯关电脑,再加上nt的真人验证,要掉大分了。

2024-07-20 16:19:45 413

原创 atcoder abc 360

第一个二分找到向左移动的蚂蚁中第一个坐标大于等于x蚂蚁的坐标,如果找不到,则说明x不会对答案有贡献,直接continue,反之如果找到了,那么开始第二个二分,第二个二分查找的是最后一个小于等于 x蚂蚁的坐标 y 加上 2 * T的蚂蚁。思路:三层循环,第一层循环枚举w,第二层循环枚举w个字母中的第i位,第三层循环枚举被划分后的每个字符串的第i位。思路:输出所有装有至少2个物品的盒子中除了最大质量的物品其余物品的质量和。将向左移动的蚂蚁视作静止,同时向右移动的蚂蚁每个单位时间移动2个单位长度。

2024-07-01 10:06:09 426

原创 atcoder abc 359

注意到每次竖直方向上走一个可以在水平方向上多增加一个偏移量,因此只要先解决竖直方向,然后可以得到一个水平方向的最大范围,只要水平坐标在这个范围内就不用计算水平方向上的花费,反之计算差值除2即可。j与k之间又有什么联系呢,让他们错开一位上下摆放,就可以发现除了第一位和最后一位,其他位都是相同的。再加一维索引dp[i][j]表示以下标i开头的字符串且状态为j的所有good string 的数量。思路:找出所有a[i - 1]与a[i + 1]相等的pair。则有dp[i][j] += dp[i - 1][k]

2024-06-26 17:22:30 351 2

原创 atcoder abc 358

1 字符串比较是浪费时间时间,因此可以考虑优先处理下字符串,这里的做法是状态压缩,o代表二进制的1,x代表2进制的0,两个摊位的爆米花口味是a | b。思路:堆, 排序, 双指针,贪心,平衡树都可以做。思路:记录下第 i-1个人买完票的时间now,更新now 为max t[i], now后now + a 输出now。3 排列组合优化 这里选的摊位并没有明确的顺序,因此先选a和先选b是一样的,可以在dfs中记录一个start。思路:注意到n很小,考虑爆搜,现在思考一个问题,如何把时间尽可能的压缩。

2024-06-22 16:45:02 556

原创 GDCPC

接着开始寻找遍历顺序,顺着上面的思想推个公式假设节点x有n颗子树,为了简化问题,这里n取2(其实是不会证n...一堆式子看着就头疼)分别为1 2设先计算1为最优解 则有 w[1] * 1 + w[2] * (_size[1] + 1) > w[2] * 1 + w[1] * (_size[2] + 1) 化简 w[2] * _size[1] > w[1] * _size[2]递推式子就出来了...只要在dfs时,对于每个u临边遍历完之后对其临边按照这个式子sort即可。例如一颗如图所示的树。

2024-06-20 10:29:34 263 2

原创 算法竞赛数论杂题

但是现在两端点都是不确定的,注意到 l <= k * g < (k + 1) * g <= r 注意到我们想要得到的gcd与k的乘积是不大于r的,因此这两个未知量的较小值是不大于sqrt(R)的,因此我们可以枚举较小值i,另一个值自然可以通过R / i得到 由于在循环中k * g <= r 是一定的,因此在判断方案是否合法时只需要判断左边界l是否满足即可。时间复杂度o(sqrt(R));显而易见,如果a = b x将会有无穷个,如果 a < b x将为0。因此k一定是(a - b)的一个因数。

2024-06-19 20:32:07 384

原创 atcoder abc357

思路:逆元,快速幂,对原式子变形后发现最后的结果实际上就是x 乘上一个等比数列,这是碰见的第一道逆元的题目,也明确了我对逆元的认识,由于 a / b % mod!= (a % mod/ b % mod) % mod,而直接除的话会造成精度丢失,因此我们可以把除法变成乘法,根据费马小定理如果b和p互质,那么b的逆元就等于b ^ p - 2 因此可以快速幂求逆元。思路:大小写转换,这里有个问题,为什么我的转换最后都变成数字了,先留个疑问。思路:前缀和,暴力,你想咋做就咋做。

2024-06-09 22:12:09 1002 3

原创 atcoder abc 356

思路:注意到问题实际上把所有元素都做一遍比较,并且用大的数除小的数,因此最开始的思路是先sort,再用前缀和做,最后发现样例都没过去,发现前缀和会影响每个pair下去整的性质,例如3 / 2 + 3 / 2下去整 = 3 但是 s[3 + 3] / 2 = 3 并且找不到优化方法。思路:位运算,对m拆位后,对于m第i位的二进制数字x,只有x为1时对答案有贡献,于是问题变成了找到1 ~ n中所有第i位(m >> (i - 1) & 1 == 1)为1的1的总和。思路:暴力枚举,枚举后作比较。

2024-06-02 22:19:02 601

原创 atcoder abc 355

【代码】atcoder abc 355。

2024-05-26 17:21:50 430

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除