01 2021 档案

摘要:原题链接 考察:容斥原理 这题完全不会....本蒟蒻连求出x~y区间p倍数的和都没想出来....虽然在质数距离那道题有涉及但是不完全想写那个公式..... 这道题也是HDU 1695 的变式,那道题是求[x,y]区间与x互质的个数,本质也是转化为1~y互质数-1~x的互质数. 参考大佬的思路: 将[ 阅读全文
posted @ 2021-01-31 21:47 acmloser 阅读(60) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理 错误思路: 枚举预处理每一个数C4n 的组合数,将p数组的每一个数求约数集合,将约数个数>=4的纳入容斥的集合内.再用容斥计数解决. 时间复杂度是10000*100*2出现次数>=4的约数个数 ,前面的时间复杂度已经到了1e6,如果个数>7就已经有超时风险,更不要说总共10 阅读全文
posted @ 2021-01-31 18:29 acmloser 阅读(67) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理 思路: 这道题就是 GCD HDU - 1695 的弱化版.把这道题翻译一下就是在(1,a)区间有多少个与(1,b)区间的数gcd=1 想出这个就可以解决了,如果a b都声明int型,相乘的时候我们不要忘记转化long long 1 #include <iostream> 阅读全文
posted @ 2021-01-31 15:01 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理 迷惑数据,108x15,我寻思这不要高精度?结果网上全是long long就过了... 思路: 观察发现如果能完成任务,那么n+1数字里至少有一对gcd是1,这样不好考虑,但碰到"至少一对"这种词语可以考虑补集思想,即没有一对公约数为1.这样就转化成求M的质因数...然后计 阅读全文
posted @ 2021-01-31 13:05 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理 入门题,我WA了两次... 坑点: m集合里有0,请务必看清题目做题 res是集合的最小公倍数,if判断条件也要改成最小公倍数... 其他的就是acwing的模板题改改部分代码即可 1 #include <iostream> 2 #include <algorithm> 3 阅读全文
posted @ 2021-01-31 03:00 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理 思路: 很容易想到筛质数,然后枚举质数2k 3k 5k ...但是如果从指数的取值范围考虑,最小是2,那么最大取到109 这样必定会TLE. 换个思路,如果从指数方面考虑,x2 x3 x5 .那么1~N中,最多有N1/k 个k√ N 个取到k次方的数.因为260 > 1e1 阅读全文
posted @ 2021-01-31 01:40 acmloser 阅读(49) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:暴力枚举 完全是因为有容斥原理才做了这题,结果这题和容斥原理有啥关系... 思路: dfs枚举所有可能性 1 #include <iostream> 2 #include <algorithm> 3 #include <set> 4 #include <vector> 5 using 阅读全文
posted @ 2021-01-30 22:51 acmloser 阅读(69) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:容斥原理+埃氏筛+质因数分解 思路: gcd(x,y) = k 等价于gcd(x/k,y/k) = 1.设 u = x/k,v= y/k.找出范围内u与v互质的对数. 这里可以用欧拉函数做,枚举1~d/k每一个数i.如果i在b/k范围内就是欧拉函数值,如果>b/k就是该欧拉函数值-b 阅读全文
posted @ 2021-01-30 21:20 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:欧拉降幂+中国剩余定理+lucas求组合数 思路: 本道题的答案求出幂后快速幂一下即可,所以主要是求幂,由欧拉降幂可知,我们的幂是需要%phi[mod]的.但mod=999911659,是一个质数,mod-1后是一个合数.设此合数为M,我们需要找的就是组合数和%M.但本题直接求组合数 阅读全文
posted @ 2021-01-30 16:03 acmloser 阅读(67) 评论(0) 推荐(0) 编辑
摘要:原题链接 思路全是看算法竞赛进阶指南,我自己是不会做这题的... 很详细的题解GO 解释一下为什么答案要乘上多重集排序的公式. 假设一个序列 2 3 4 5 6 1. 我们将5和 3互换,就可以得到 2 5 6 1和 4 3两个自环,答案的Fx*Fy是将这两个自环整理为有序的序列.形成 1 2 5 阅读全文
posted @ 2021-01-30 11:51 acmloser 阅读(96) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:卡特兰数 错误思路: 将答案当成卡特兰数的前缀和.这种答案是到达i点后,机器人完全不动,但此时可能步数还未用完 正确思路: 机器人向右是卡特兰数的向右,机器人向左是卡特兰数的向上.这就是模拟进出栈,y=x上方代表出栈数>入栈数.但这里我们还需要计数不走的方法数 设我们向右走了a步,总 阅读全文
posted @ 2021-01-30 00:10 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:卡特兰数 错误思路: 利用Cn2n /n+1 的公式求解.本蒟蒻没搞懂Y总推的公式,这个公式是在取模意义下,求(n+1)的逆元再求.而不是求完组合数/n+1... 如果是累加的话,需要每个都求n+1的逆元.但是这道题,不能用这个公式,因为与100一起求exgcd的数未必gcd=1,如 阅读全文
posted @ 2021-01-29 20:38 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:高斯消元or递推+枚举 写过这种基本一样的题的题解= = ,看了大佬博客还能用高斯消元写,虽然是入门题但这操作我属实没想到= = 思路: 如果要用高斯消元写,首先我们需要构造系数矩阵.较容易想到解就是按灯的次数.那么系数就是按这个灯对当前灯是否有效.等式右边是原灯状态.因为按灯效果要 阅读全文
posted @ 2021-01-29 10:39 acmloser 阅读(50) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举+质数筛 错误思路: 通过观察很容易发现指数必须是合数,筛出质数,用质数为底数快速幂求幂后的结果insert进set 这个思路有几个错误点: 合数也可以是底数 如68 这个用质数快速幂是求不出来的(思路不完全...) 不能用快速幂求结果,这样不能判断是否溢出 正确思路: 一个一个 阅读全文
posted @ 2021-01-28 20:00 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 基本是抄lnj老师的代码,这种方法本蒟蒻就是被打死都想不出来= = 错误思路: 枚举每一种组合,代入模板求解,将解排序输出 这种思路主要错在两个地方: k<=100,C<=9.最多有1009种枚举方式.TLE 枚举的组合数<要求输出的解数.此时我们需要对解+res直到解足够.但解必须是有序 阅读全文
posted @ 2021-01-28 15:41 acmloser 阅读(90) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:中国剩余定理+龟速幂(这个用不用均可) 是裸题,记录一下关于中国剩余定理的坑点 最后相乘有爆long long的可能 龟速幂要注意b不能为负的问题 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 u 阅读全文
posted @ 2021-01-28 12:38 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:扩展中国剩余定理 关于本题的exgcd(a1,-a2)与exgcd(a1,a2).得到的解和最小公倍数不同.但得到的解*(m2-m1)/gcd(a1,a2)最后结果又会化为相同. 如果用exgcd(a1,-a2),下面求a1就需要将他fabs,求解需要a1来得到最小正整数解. 个人理 阅读全文
posted @ 2021-01-27 21:31 acmloser 阅读(87) 评论(0) 推荐(1) 编辑
摘要:原题链接 考察:思维+二分 错误思路: 根据分析可以发现当n为5的倍数时,n!会多>=1个0.如果n能分解k个5.那么会在(n-5)!的基础上多k个0.看到这里可能会想到前缀和预处理,但是当n=1e8时,它的0还未到1e8个.如果用数组存储会MLE. 正确思路: 不能预处理只能每个每个地算,但是每次 阅读全文
posted @ 2021-01-27 14:02 acmloser 阅读(44) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:高精除 为什么在数论题单看见这道题... 坑点: 本蒟蒻WA一次的原因可能是存在多个负号的坑爹数据,改了这个AC了..不太清楚是不是因为改了别的地方 1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 阅读全文
posted @ 2021-01-27 01:05 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 质数筛+分解质因数 但我觉得考察的应该是分情况处理的能力 n>0,被唯一的质数分解 直接输出答案即可 n>0,被多个质数分解(完全没想到还有这种数据) 输出的答案应该是最小的指数 n<0,被唯一质数分解. 且指数为奇数. 这正好处理了负号问题,直接输出即可 n<0,被唯一质数分解. 阅读全文
posted @ 2021-01-26 23:45 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:打表+思维 直接开1e8的数组预处理会MLE. 所以需要压缩打表.每100存储一次. 预处理的时候看大佬有更好的方法,eg:用一个变量接收1~99之间的和,到%100==0时再赋值给数组 1 #include <iostream> 2 #include <algorithm> 3 # 阅读全文
posted @ 2021-01-26 22:06 acmloser 阅读(51) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:质数筛+唯一分解定理 这道题的思路与该题GO 的解法二相同 错误思路: 预处理质数,分解质因数,dfs两个约数,结果是TLE 时间是2891ms 正确思路: 如同上题的解法二.本蒟蒻一开始的思路也是这个,但是本蒟蒻没想出来lcm(8,3)这种情况怎么统计= = ,只想到一方为n,另一 阅读全文
posted @ 2021-01-26 17:59 acmloser 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:整除分块 原来之前那道余数之和是这道模板题的运用= = GO 和余数之和一样的分块思想. 坑点在之前的素数距离已经遇到过,就是for循环i+1刚好溢出 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 阅读全文
posted @ 2021-01-26 12:48 acmloser 阅读(61) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:素数筛 错误思路: 筛出1e7的素数后,upper_bound找到n/2的位置,lower_bound找+prime[i]==n,的prime[idx],找到后判断是否和为n,是就ans++ 此思路会TLE... 正确做法: 在找与+prime[i]=n的素数,不用lower_bou 阅读全文
posted @ 2021-01-26 11:42 acmloser 阅读(52) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:快速幂+log运算 求后三位应该不用说,关键是前三位,打死我都想不到系列 看了大佬题解的思路: 涉及位数的题或许都涉及log10.这里也有道求位数的GO 虽然这道题我做过,但做本题的时候我完全没想起来 如果求前三位,可以考虑小数求比较方便,后三位就是整数求比较方便.因此这道题需要转化 阅读全文
posted @ 2021-01-26 02:12 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:约数+奇偶性or打表 错误思路: 本蒟蒻打表打的是1~n的约数和,结果啥都没发现= = 正确思路: 首先要想到求约数和的公式,我们要求约数和为偶数,这时要想到奇偶讨论.显然只有奇数*奇数=奇数,其他都为偶数,为了方便讨论,直接看奇数.只有这些因子全为奇数最后的约数和才可能等于奇数.根 阅读全文
posted @ 2021-01-26 00:33 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:质数筛+约数+dfs 思路: 预处理1e6以内的质数,用质数分解a,枚举小于√a的约数,加上一点剪枝(注意:矩形不包括正方形) 讲一下几个坑点: 判定res是否超过√a时,不要用res*res判断,会溢出,y总真是yyds 提醒我自己,线性筛模板真的不要再写错了!!!!外层循环是到n 阅读全文
posted @ 2021-01-25 22:09 acmloser 阅读(48) 评论(0) 推荐(0) 编辑
摘要:原题链接 还是不会建立二分图啊!!!蒟蒻落泪 想了很久以为是缩点,结果不用缩就是在相邻点处建边就行了(覆盖面积不允许重复!!!) 关键还是建立二分图: 这道题是将相邻点在不同集合,比如[1,1]在集合1,[1,2]、[0,1]在集合2.通过画图可以发现如果相邻则它们的i+j的奇偶一定不同.因此可以分 阅读全文
posted @ 2021-01-23 22:24 acmloser 阅读(44) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分图匹配+线性代数(?) 完全是参考大佬的思路: 根据线性代数的知识,如果矩阵的对角线全为1,说明该矩阵的秩是满的,而初等变换(交换行或者列)不改变矩阵的秩,因此行变换可由列变换代替,其实这道题感觉是在求矩阵的秩,行列变换同时进行会改变矩阵的秩,因此这道题只用行变换或者列变换即可 阅读全文
posted @ 2021-01-23 22:05 acmloser 阅读(67) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分图匹配+图论的基本操作 图论题目做多了看到这句不在这些格子上放车,也可以保证尽量多的“车”被放下,应该能反应过来是删边操作 其实我没反应过来 这道题和之前的HDU 1045一样也是缩点操作,通过这道题也搞明白了点之前的缩点操作,行集和列集有交集才能连边,然后就是走一波最大匹配,最 阅读全文
posted @ 2021-01-23 17:35 acmloser 阅读(61) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分图匹配 上题学会如何分配集合,这题又学会哪个作为匹配的主动方... 正常思路是人到课,但是本题课到人更方便处理,猜想二分图应该是一对多做主动方 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 阅读全文
posted @ 2021-01-23 14:50 acmloser 阅读(40) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分图匹配+二分图判定 蒟蒻落泪,一开始不知道怎么分组,想了很久才发现在判定的时候就能分组. 看了一些大佬的题解,建立有向图,每个点跑一遍匹配,也能AC.但是这样感觉有点不太对,样例这样跑就会一个点连了两条边.可能我没get到大佬思路 我是采用vector存储,但没必要,用color 阅读全文
posted @ 2021-01-23 14:03 acmloser 阅读(42) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:暴力搜索或二分图匹配 暴力搜索的思路: 对地图的每一个位置dfs,如果放炮就要判断该处上下左右有没有其他炮,如果不放就继续搜索 关于判断:我们需要选定一个方向一直走,可以用while,我一开始的思路是bfs标记放了炮的上下左右.这种做法是错的,如果炮在(1,1)按bfs(2,1)会被 阅读全文
posted @ 2021-01-23 12:07 acmloser 阅读(36) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:思维+最短路 给我100小时都想不出这种操作 根据题意: 要求1可转化成1只有一个出度 要求2可转化成4只有一个入度 要求3可转成2~n-1入度=出度 要求答案最小,也就是1尽可能少,0尽可能多.即求边同时也要保证1也就是边的权值最小.这就是最短路问题 如果1->n权值和最小,则答案 阅读全文
posted @ 2021-01-22 22:23 acmloser 阅读(54) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最短路+建图 本题最难在建图 根据题意,我们需要在在相邻层(必须都有点存在),额外边之间建边.题目给的N在10^5左右.如果题目给的N只分布在两层,那么暴力建相邻层的边,需要两层for循环判断的时间复杂度在O(n^2).必定TLE. 根据这道题,相邻层的点可以走相邻层的固定路长,也可 阅读全文
posted @ 2021-01-22 20:11 acmloser 阅读(73) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集+邻接表+逆向思维 kuangbin题单有这道题,但那道题本蒟蒻只看了思路,没有实现,今天做了一下才发现没有那么简单..... 错误思路: 离线处理,将所有的要连的边先存储,标记要摧毁的点,将还未摧毁的点先连接.再将存储的摧毁的点从尾到头遍历,边涉及本次修复的点的就连接, 结果 阅读全文
posted @ 2021-01-21 21:36 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最短路+枚举 错误思路: 枚举所有点作为起点,看所能更新到1点的最短路.返回的dist[1]即为答案. 此思路错在等级处理.如果以pos[1]-m<=k<=pos[1]+m,那么交易途中的最高点和最低点就无法更新.如果在交易途中更新最高点和最低点,那么走错路的时候就不能回溯 参考了大 阅读全文
posted @ 2021-01-21 21:27 acmloser 阅读(42) 评论(0) 推荐(0) 编辑
摘要:原题链接 记录一下不管做几次都不会写的题 考察:STL+hash 第一次做完全是地铁老人看手机,第二次做基本默写lnj的代码还只能想起思路,本蒟蒻属实fw 正确思路: 因为要输出栈顶集合的size,所以不能拿两个int做键和值.需要将set映射为int,而对应int我们也要能获得相应的集合.这里用到 阅读全文
posted @ 2021-01-21 14:50 acmloser 阅读(44) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最短路 错误思路: 拓扑排序两次正反建图,当队列只有一个元素说明可以排名. 此思路错在当所有牛都可以排序时,会重复计数.或者图呈8字形,即中间牛可确定排名,两边牛不可,还会计算错误 正确思路: 如果一头牛可以确定排名,那么他前面的人数和后面的人数都是确定的.即入度+出度==n-1 用 阅读全文
posted @ 2021-01-21 00:06 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:spfa或者BF 本题边有多个属性值,所以需要多开几个数组 正确思路: 因为图是成环形的,最终会回到原点,如果值变小了最后队列会为empty,如果值变大了,队列会在i==s时,跳出循环 本题最好重新做过一遍 1 #include <iostream> 2 #include <cstd 阅读全文
posted @ 2021-01-20 20:30 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最短路 错误思路: floyd,肉眼可见的超时(但是有用floyd过的,tql) 正确思路: spfa+两次建图 正向建一次反向建一次,这样就是单源最短路 1 #include <iostream> 2 #include <queue> 3 #include <cstring> 4 阅读全文
posted @ 2021-01-20 17:32 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最小生成树或最短路 这类题型感觉终于搞懂了一点...蒟蒻落泪 这里还有道和本题差不多的题GO 思路: 我们要让最小边权最大,也就是我们尽量走权大的边.spfa更新dist数组时,要赋值大值.但同时我们也需要让这条路径边权最小,也就是这条语句: dist[i]<min(g[t][i], 阅读全文
posted @ 2021-01-20 16:37 acmloser 阅读(38) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:构造+组合数学 错误思路: 暴力枚举1 33 的个数,通过一些剪枝操作得到各自的长度,我们暴力枚举个数,通过它们组合数==n来求解字符串. 但是注意: 但是注意求解组合数==n.如果n为>1e5的质数(拆成3个因子只有1*N*1一组情况).那么甚至得不到解.但题目要求是一定有解的.因 阅读全文
posted @ 2021-01-20 02:45 acmloser 阅读(72) 评论(0) 推荐(0) 编辑
摘要:原题链接 真是绝了,做过差不多的判重思路的题下次判重还是想不起来,我果然fw 考察:dfs+图 思路: 利用二维数组判重,在for循环外面求最大路径,否则会少算一个结点 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 阅读全文
posted @ 2021-01-19 22:31 acmloser 阅读(39) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:约数 看题解说是常规数论题,本蒟蒻果然fw 错误思路: 暴力枚举,但是这一定TLE 正确思路: 这道题实质上就是求每个数的约数.时间复杂度O(N*√inf)大概10^8左右.这个思路比较容易想到.但是输出1、2....i个数的公约数就比较难(对本蒟蒻而言).实际上.我们统计完每个数的 阅读全文
posted @ 2021-01-19 17:20 acmloser 阅读(58) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:gcd(?)思想 这道题的递归很容易写.基本改改gcd模板就可以.但是这样会MLE.比如这样的数据:100000000000000和1.这样long long 要调用100000000000000次.而主函数的栈必然会爆掉.这道题用ll不优化递归过不了更别说unsigned long 阅读全文
posted @ 2021-01-19 16:58 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:gcd 和蒜头君的数轴基本一样的题,但是要注意等差数列包括d=0,要注意除0的问题 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 using namespace std; 5 typedef lo 阅读全文
posted @ 2021-01-19 13:02 acmloser 阅读(79) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:前缀和 2021.3.6 二刷写出来了,树状数组的题目做过这题就会很有灵感.... 错误思路: 求前缀和,再枚举左右端点,时间复杂度O(n^2),TLE 正确思路: 端点枚举不能优化.可以考虑推式子.要求的答案是(sum[r]-sum[l-1])%k==0.优化一下就可发现式子变成s 阅读全文
posted @ 2021-01-19 00:10 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:递推 错误思路: bfs,会TLE,如果不判重的话会MLE.在最坏情况下字符串长度100,有99个不同的选择.假设一个起始字符串与目标字符串完全不同则起码50步.这50步每步都有99种选择.时间复杂度50^99 正确思路: 将起始字符串每一个间隔看成一个开关.当第一个字符不同,只能按 阅读全文
posted @ 2021-01-18 20:52 acmloser 阅读(53) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:dfs 日常感慨自己的rz,自己想的思路和y总一样,也是dfs嵌套.但是代码不会实现而且想的是4个dfs嵌套.醉了 自己的思路: N = a+b/c,a b c的位数需要dfs枚举,确定位数后dfs a,b,c在最后c进行ans++.思路是4个嵌套但是不会剪枝555.而且感觉真的是极 阅读全文
posted @ 2021-01-18 16:29 acmloser 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:快速幂 这题太无语了,如果合数在[2,n-1]范围内都符合等式,那么就是卡迈克尔数.我写了判断条件是随便一个符合就是卡迈尔数.但这很明显错了,存在合数有一些比它小的数符合条件而一些不合法的情况 1 #include <iostream> 2 using namespace std; 阅读全文
posted @ 2021-01-18 10:06 acmloser 阅读(73) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:GCD+前缀和思想 根据题意,最多允许一个区间和其他区间的距离不一样.因此在计算的时候我们需要去掉那个区间.那么剩下的区间取多大呢?可以发现:剩下区间要求的长度一定为它们的最小公倍数.这样才能凑得相等.假设剩下区间要求长度为k,区间需要增加的点数为len/k-1.因此最小的点数就是k 阅读全文
posted @ 2021-01-17 22:24 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:质数筛+欧拉函数 正确思路: 列出下标从小到大列出欧拉函数的值,可以发现合数的欧拉函数值在前面一定有个比它小的质数取值与它相同.比如phi[4]=2,而在它前面phi[3]已经可以取值2.根据这条性质可以AC此题 易错: 不能只筛到1e6的质数.如果a[i]刚好取值1e6.那么就取不 阅读全文
posted @ 2021-01-17 19:00 acmloser 阅读(53) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:STL 错误思路: 用STL的set看是否重复,如果有重复就erase 起始迭代器直到不重复为止 该思路错在set自动排序啊啊!!! 应该可以用C++11的unordered_set.但是这道题可以只用set解 温故知识:set的erase元素可以删除迭代器所指向元素,也可以直接删除 阅读全文
posted @ 2021-01-17 17:07 acmloser 阅读(37) 评论(0) 推荐(0) 编辑
摘要:原题链接 数论的时间复杂度我真的越来越懵逼.....找个时间再琢磨一下 这道题枚举一定超时.将n分解质因数后也没找到什么规律.因此只能从gcd返回值入手.在int范围内约数最多是1536个.因此是可以枚举约数的 看了大佬的思路: 假设当前数字为i,设gcd(i,n)==k.那么为了简化计算.我们可以 阅读全文
posted @ 2021-01-17 15:58 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:欧拉函数 orz...AcWing的例题再做一次不会做了..满脑子线性筛开不了那么大的数组.到把原公式忘了.... 其实不用筛质数.直接分解质因数即可 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 阅读全文
posted @ 2021-01-17 11:42 acmloser 阅读(99) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:欧拉函数+递推 数论的每一道题都是看书上的提示才做出来...orz 正确思路: 通过观察发现(要看题目给的图,自己画的图观察不出答案....),当gcd(x,y)==1时.这个点就可见.所以当x与y互质答案就++.考虑到互质可以想到欧拉函数.这道题大正方形的答案可以由小正方形推导出来 阅读全文
posted @ 2021-01-17 02:45 acmloser 阅读(90) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:dfs+质数筛+约数 错误思路: 枚举b1的每一个约数,进行gcd和lcm的判断 时间复杂度O(√10^9),再加上gcd和lcm的判断是log(n)=10,测试样例2000.时间复杂度>10^8,会有一个测试点TLE 注:gcd的时间复杂度是log(a+b) 正确思路: 同样需要枚 阅读全文
posted @ 2021-01-16 23:04 acmloser 阅读(106) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:推导公式 蓝书是将本题归纳到约数里,我实在没看出来这道题和约数有啥关系 这道题计算k%(1~n)的值,实际上是求k - [k/i]*i的值.转化后将式子累加得到n*k-累加和[k/i]*i. n*k是已知的式子,i在循环里枚举,唯一要求的是[k/i].一个个求是肯定不行的,因此需要求 阅读全文
posted @ 2021-01-16 17:50 acmloser 阅读(77) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:推导+gcd(?) 求在1~n的范围内,取k个数求它们的最大公约数. 还以为是一个个枚举,看数据范围感觉不对,结果看了讨论区....我果然fw 正确思路: k个数的最大公约数.假设公约数为x,则这k个数为x,2*x,3*x....k*x我们需要让k*x尽量靠近n,所以答案显而易见.. 阅读全文
posted @ 2021-01-16 11:43 acmloser 阅读(40) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:约数+推导 完全不会,fw本f 参考y总和lyd大佬的思路: 假设x为答案的话.当i<x,则g[i]<g[x]; 当i>x ,则g[i]<=g[x].因为x是最大的反质数.所以比x大的不允许有答案 假设x分解质因数的指数不呈递减式分布.那么后面大的数与前面小的数交换指数,可以得到一个 阅读全文
posted @ 2021-01-16 11:10 acmloser 阅读(60) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:分解质因数 卡死我的是我不知道如何存储S和m1的每一个质因数,一个个对比又觉得好麻烦..结果看了大佬的题解...对不起我是fw 正确思路: 题目应该是比较明显的分解质因数...这道题我们只需要存储m1的质因数.对于每一个S,我们直接让它÷m1的质因数即可.如果不能全部都除尽,那么S不 阅读全文
posted @ 2021-01-15 20:31 acmloser 阅读(191) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:质数筛 错误思路: 用Map可以很方便地合并同类项,但是用Map会MLE 正确思路: 对于1~n的每1个数,它们都会被它的最小质因数筛掉.这道题不是求分解n的质数,不能只枚举到√n.因为1~n之间还存在着质数.这些质数能够除尽>√n的质数 用筛法求出质数后.可以发现1~n的能够分解出 阅读全文
posted @ 2021-01-15 17:29 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:质数筛 一开始是在POJ上做的,感谢AcWing让我看到错误数据555 思路: 朴素筛肯定不行.但这道题数字范围很大以至于数字难以用数组存储.好在题目提示r与l的范围差不超过1000000.这样可以将数组下标偏移,这样就能利用筛法求区间素数 这道题要求出质数距离,也就是我们需要先求出 阅读全文
posted @ 2021-01-15 14:34 acmloser 阅读(83) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集 看了大佬的代码后才懂.本蒟蒻属实好菜.. 正确思路: 考点就是并查集删除点的操作.如果每个点的父亲赋原值,那么findf函数后修改某一非叶子结点,后面的结点也会被修改为修改后的值.因此此法无效 正确做法是设置虚父结点.i的父亲是i+n,但初始化的时候和一般并查集有点不一样.在 阅读全文
posted @ 2021-01-15 00:45 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最小生成树+枚举 错误思路: 枚举m个点,将m个点的边权值计入和,与点权值和作商求最小值 上面的思路错在题目是要求求m个点的树的比率最小.如果边权值不去掉一个而全部计入的话就会WA 正确思路: 枚举m个点,求最小生成树 1 #include <iostream> 2 #include 阅读全文
posted @ 2021-01-14 22:38 acmloser 阅读(69) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最小生成树+并查集的运用+离线处理 永远不会动脑思考TAT 看大佬来的思路: 这道题的询问量很大.因此可以采取一些技巧.我们可以发现L大的答案是可以由L小的答案累加得来的.因此这道题对询问进行排序.先处理L小的询问.再进行累加推导L大的询问. 当i,j有多种路径,我们是选择一条经过路 阅读全文
posted @ 2021-01-14 16:41 acmloser 阅读(93) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举+最小生成树 错误思路: 根据最小生成树建立邻接表.每次询问就dfs...这解法我没做出来.图的dfs还不太熟.等之后熟了再补吧. 正确思路: 每次询问求i,j最大权值与最小权值的差.实际就是问最小生成树上i到j的最大权值与最小权值的差.这道题可以直接枚举.参考上一题当i,j在一 阅读全文
posted @ 2021-01-14 14:18 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最小生成树 感觉很水,没做 但这道题看了别人代码更理解了最小生成树.我们没必要把已经建立公路的路设置权值为0,而是将他们并入集合.最小生成树会涉及所有的点.所以这些点一定会被并入最小生成树里. 别人的代码 记一下以后补了这道题 阅读全文
posted @ 2021-01-14 01:02 acmloser 阅读(62) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最小生成树 错误思路: 计算每一条边,将最大的s-1条边的距离都变成0,再排序,让生成树选择 这个思路错在最大的边不一定在最小生成树里.我们要让图连通.需要先建一颗最小生成树.再让树的大边变成权值为0的边 谨记:最小生成树不是每条边都选了 1 #include <iostream> 阅读全文
posted @ 2021-01-14 00:49 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:最小生成树 这道题难就难在怎么转成最小生成树的模型.本蒟蒻是看了别人的博客看着看着突然顿悟..(本蒟蒻不配) 正确思路: 字符串相互转化成相同的字符串.不同的字符串之间的字母差距其实就是这个字符串到不同的字符串的距离.明白之后直接套模板 1 #include <iostream> 2 阅读全文
posted @ 2021-01-13 21:20 acmloser 阅读(70) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:基础并查集 思路: 已经在集合的不能在连边 易错: 注意所有房间都要连通.所以最后正确的图是一张最小生成树 1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 #include <set> 5 usin 阅读全文
posted @ 2021-01-13 08:56 acmloser 阅读(61) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bf或者spfa判断负环 应该是负环判断的入门题.这道题记录一下bf算法判断负环的模板.万一以后要用呢~ 注释基本写在代码里 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespac 阅读全文
posted @ 2021-01-13 00:35 acmloser 阅读(93) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:位运算+推导 本质是考察推规律,我一眼看过去还以为是字典树.结果这树枝多的离谱.排除字典树的做法.因为数字又是可以随意取于是本蒟蒻蒙蔽.. 参考大佬的正确思路: 在草稿纸上可以列出1~n的答案可以发现规律:当k==1,答案就是n.当k>1,答案就是2的n的位数次方-1. 1 #inc 阅读全文
posted @ 2021-01-12 21:03 acmloser 阅读(62) 评论(0) 推荐(0) 编辑
摘要:考察: dijkstra+枚举 思路: 先看最短路端点有无答案,再看边上有无答案. 对于每一条边,我们需要找它的最短路径有无答案. 需要分类讨论: 一条边的a,b端点.如果a的最短距离>=d,那么肯定没有a的答案.同理b 如果a端点小于d,b端点>=d.且dist[a]+len>d那么肯定有a的答案 阅读全文
posted @ 2021-01-12 20:29 acmloser 阅读(83) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:拓扑排序+dfs 我觉得这道题最难的是理解题目... 这道题的字母是随机使用,不一定按顺序 思路: 我们先要在相片中找到各字母的边框.这里只能暴力查找.找到后遍历边框如果边框不是该字母,说明此字母是下面的边框.利用拓扑排序加边即可. 比较难的点是dfs遍历拓扑排序.本蒟蒻是看了别人的 阅读全文
posted @ 2021-01-12 01:32 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:拓扑排序 错误思路1: 先找到字典序最小的拓扑序列,再挨个赋值. 这个思路错在这道题需要的不是字典序最小的序列.而是字典序小的位置尽量靠前的序列.也就是说1 2 3...的位置要尽量考前.序号越小优先级越高 正确思路: 这道题需要保证1 2 3...拓扑序列的位置应该尽量小.也就是说 阅读全文
posted @ 2021-01-11 23:29 acmloser 阅读(75) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:拓扑排序 不会写orz,蒟蒻本蒻了.完全不能从题目抽出模型来 这道题是x、y、z轴三个拓扑序列. 根据操作进行加边,要注意的是I操作要求的是x的最大坐标大于y的最小坐标.而x与y的关系并没有约束.画了一下图大概是因为y可以包括x 易错: 初始边注意不能根据操作加,如果有盒子不在操作里 阅读全文
posted @ 2021-01-11 18:18 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集+拓扑序列+离线处理 难点在于并查集如何运用,我是卡在如何判断条件不足那里卡了很久.拓扑序列处理不了等号问题.如果用队列中无根结点的元素>2来判断条件不足的话,也存在相等利用序号大小排列名次的问题.因此这题就没写出来... 错误思路1: 利用并查集判矛盾,利用拓扑序列判断是否无 阅读全文
posted @ 2021-01-11 14:42 acmloser 阅读(62) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:拓扑排序+逆向思维 看来之前的反向并查集还是要补一下,这道题同样是利用逆向思维,再次碰到我还是不会写 思路: 这道题如果按正常的拓扑序列做,就难以得到正确答案,因为入度相同的点不一定都必须是同一报酬.但是如果我们将序列反转,那么求答案就容易得多.这样入度相同的点也不必是同一报酬.这些 阅读全文
posted @ 2021-01-11 01:23 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:拓扑排序(?) 这道题压根不用判断是否成环如果判断了反而是错的(WA了3次),只需要判断入度==0的点是否只有一个就行 易错: 判断成环 这组测试数据证明这个是错的 a b,b c,c b 这只是说明bc不能当冠军,但是a可以 反复提醒:迭代器元素是pair,如果要用first se 阅读全文
posted @ 2021-01-11 00:23 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:拓扑排序 思路: 如果没有按字典序最小的输出就可以直接套模板,但是要求字典序最小.首先想到队列里的元素一定是没有入度的点,当这些点在队列中说明前面已经确定好顺序了.而队列里的点的顺序是不会改变拓扑序列的性质.因此可以用大根堆或者sort排序AC此题 易错: 数据好像有重边,但拓扑排序 阅读全文
posted @ 2021-01-10 23:11 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:dfs+素数 这道题在hdu和uva都有,但是相较uva,hdu的数据明显弱了.就算改了输出格式,相同代码在UVA是WA,而在HDU可以AC 当N<=16,数组不能只开到30,因为最大是16+15=31 这道题没怎么想直接看了lrj老师的代码...下次还是要认真想啊!!!! 思路: 阅读全文
posted @ 2021-01-10 17:15 acmloser 阅读(84) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs WA了n次结果发现是m写成了n真是无极鲅鱼 思路: 两次bfs,分别统计他们到地图上每一个点的最小时间,在KFC处取最小值即可 不知道能不能让他们同时走,这种写法我不会 易错: 存在他们不能到达的KFC,所以不能简单地只考虑最小值 1 #include <iostream> 阅读全文
posted @ 2021-01-10 16:36 acmloser 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs+一点技巧 很明显是要人和火一起bfs,但是这道题我不知道怎么区分本次的火和下一时间的火,于是这道题就没做出来... 看了大佬代码后的思路: 当火开始bfs的时候,用变量记录火队列的大小,此时的while条件不是!fq.empty()而是sz--当sz==0时退出,同理人 这里 阅读全文
posted @ 2021-01-09 22:11 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 原思路: 在纸上模拟后,得出需要去重的结论.本来是利用pair存储,map去重顺便记录步数.但是这样没办法储存路径.后来想用map<pii,vector<string> > 存储经历的字符串.但是这样每次得到的新结点又会是新的vector,然后就卡此处没做出来 看大佬代码后思 阅读全文
posted @ 2021-01-09 19:38 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 不想写也不会写的题 考察:素数+bfs 思路: 将每一位的数字改变判断是否出现过并且是否为素数,如果是就纳入队列 错误原因: 上面的思路是很容易想到的,但是后半段我忘了bfs是一步步到达目标的,所以暂时符合要求的就先纳入,再一步步走看是否能到终点 1 #include <iostream> 阅读全文
posted @ 2021-01-08 23:11 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:dfs或者bfs 暴力枚举即可,没有什么特别的技巧 dfs:找到了就标记一下,避免继续搜索(因为答案一定在long long里,所以超过18位就可以不用算了) bfs:用G++编译,找到当即退出.注意一定要让所有路径都有返回值否则报错 1 #include <cstdio> 2 #i 阅读全文
posted @ 2021-01-08 22:09 acmloser 阅读(57) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:一点点位运算+枚举+递推 好像也可以用广搜写,但这里有个技巧真心妙 易错: 矩阵要求的字典序是从右往左最小 从Y总来的思路: 当我们确定第一行的状态时,第二行要必须灭掉第一行的1,再因为我们需要最短次数.根据第二行,我们就确定了第三行的状态,以此类推.所以我们确定了第一行的状态就确定 阅读全文
posted @ 2021-01-08 22:04 acmloser 阅读(73) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 稍微思考一下就知道dfs会超时,但是这道题我还花了很多时间仔细思考了第一次达到新的点是不是最短时间 动笔才是王道啊!!! 易错: 我写的判断条件是超出k的两倍就不考虑此点,实际上k可能比n小,这样会WA 1 #include <iostream> 2 #include <qu 阅读全文
posted @ 2021-01-08 13:44 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs+三维数组 思路: 没什么好说的,就是三维走迷宫,比二维多两个方向就是了 POJ请不要用C++11的特性 最短路还是用bfs比较好,一开始用dfs结果貌似栈溢出了 #include <iostream> #include <cstring> #include <queue> u 阅读全文
posted @ 2021-01-08 12:31 acmloser 阅读(52) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:dfs 这题我不会写...rz果然不配搞OI 看了别人代码后的思路: 一开始思路是一个位置一个位置搜,但是这样答案总是错误,看了别人代码后发现是我位置反了,应该是优先考虑放棋子,再考虑不放等下一个位置放 1 #include <iostream> 2 using namespace 阅读全文
posted @ 2021-01-08 10:27 acmloser 阅读(61) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:字符串hash+二分 这道题和前面的查找子串的题一样用到二分,答案都具有单调性,但这道题的单调性不是上道题那么明显.本道题不是简单地枚举端点,如果枚举端点当然没有单调性,本道题是用中心扩展思想(不是第一次学,但我完全不记得).选取一个端点为中心,扩散到两边看是否为回文串.因为这道题是 阅读全文
posted @ 2021-01-07 21:26 acmloser 阅读(83) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:STL 用STL去重即可,输入非常毒,存在空白字符串,我们要用getline输入,否则字符串会读到m和n的数字 1 #include <bits/stdc++.h> 2 using namespace std; 3 set<string> st; 4 vector<string> a 阅读全文
posted @ 2021-01-07 18:49 acmloser 阅读(112) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:hash+前缀和 做完这道题感觉终于懂一点hash了,散列表hash是将值存储在映射的键里,会有不同值映射到相同键,因此必须要处理冲突 这道题牛二进制的前缀和会根据ash函数映射到相同键,这些前缀和有些和答案要求根本不符,所以我们必须筛掉那些不符合的键,也就是说这道题我们不能仅仅存储 阅读全文
posted @ 2021-01-07 12:25 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:hash+字符串的最大最小表示法 通过这道题发现之前的最小最大表示法可以从1开始还不用写三元表达式,就是之前的断环成链思想,这种取余的又要下标从1开始还是断环成链比较方便 关于这道题写写对于hash的思考 字符串hash多用于已知长度的字符串,下标是字符串的下标,hash值不允许为0 阅读全文
posted @ 2021-01-07 02:01 acmloser 阅读(176) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:字符串匹配+hash优化+二分 错误思路: KMP算法是用于看一个串是否为另一个串的子串,这道题如果枚举子串,每个都求next数组再匹配时间复杂度是O(n^2) 求公共子串长度最好不要用KMP 正确思路: hash算法同样是枚举给定长度的字符串,但是hash不用求next数组,利用预 阅读全文
posted @ 2021-01-07 00:00 acmloser 阅读(71) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: hash 错误思路: 直接用字符串hash,但是字符串hash是针对给定长度求前缀的hash,这里明显不能使用 错误思路2: 没有用变量给字符制造映射,而是直接用的ASCII码作映射,但是这样WA了,目前不知原因 正确思路: 重新给字符制造映射,下标从1开始 1 #include 阅读全文
posted @ 2021-01-06 22:27 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 归并排序 八数码的延伸版,这里允许了N为偶数,所以要分情况讨论 当N为偶数,向下挪一行奇偶改变,再向下挪奇偶又改变,因此答案和0的位置有关 易错: 判断条件的时候,&1两边都要打括号不然报错 1 #include <iostream> 2 #include <algorithm> 阅读全文
posted @ 2021-01-06 11:24 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:归并排序 n恒为奇数,所以左右上下移动不会改变逆序对的奇偶性. 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int N = 250010; 5 typedef long long 阅读全文
posted @ 2021-01-06 09:38 acmloser 阅读(83) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:归并排序 思路: 这道题的延伸 1215. 小朋友排队 很明显就是求逆序对,借着这道题复习逆序对了 lyd大佬的方法待补,我是真的看不懂他的算法 1 #include <iostream> 2 using namespace std; 3 #define ll long long 4 阅读全文
posted @ 2021-01-06 01:29 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:快速排序 思路: 快速排序的原理是将小于基准点的数全部放在基准点左边,大于全部放在右边,等于随机.我们要找第k小的数,当快速排序把区间一分为2的时候,如果左边的长度>k,说明第k小的数在左边,如果<说明要找右边找k-cnt(左边的长度)个数. 当我们不断递归的时候,区间会减小通过计算 阅读全文
posted @ 2021-01-06 00:25 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:堆排序 这里涉及一个新算法:对顶堆. 其实我也第一次学 思路: 设序列长度为M,用小顶堆维护序列中M/2+1~M个数,用大顶堆维护1~M/2个数,我们动态地维护输入的数字,如果当前数比小顶堆的堆顶小就加入大顶堆,如果大就加入小顶堆.要注意我们必须保证大顶堆的size不能超过M/2,小 阅读全文
posted @ 2021-01-05 22:46 acmloser 阅读(76) 评论(0) 推荐(0) 编辑
摘要:原题链接 我愿称lyd为神 考察: 排序+贪心+前缀和 我们将行列分开看,这道题就可以看成均分纸牌的问题,如果纸牌总数不能除尽人数,那么一定无解. 如果可以除尽,本题就是环形分配纸牌问题. 我们利用贪心解题,先想方法让第一个人达到平均数,再想方法让第二个人达到平均数....当计算第i个人,需要的纸牌 阅读全文
posted @ 2021-01-05 16:37 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 排序+贪心 因为做了七夕祭那道题,就把这道题重新做了一遍 这道题本质考察对中位数的了解 我们要求的答案是累加abs(s[i]-s[k]),i从1~n. 假设货仓位置为k,那么左侧距离和为p,右侧距离和为q,如果p>q,那么我们将仓库往右移动一点,使p减小;同理q>p.我们发现我们要 阅读全文
posted @ 2021-01-05 16:23 acmloser 阅读(86) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 堆排序+归并排序 错误思路: 将m个序列排序,堆储存,每个序列都选第一个,选完后pop掉堆顶最大的. 时间复杂度大概是O(mlogn+n*m),但是不能pop掉最大的,如果遇到 a {1,2,2} b{2,9,10}就是输出{3,10,11}的错误答案. 也就是a1+b2不一定比b 阅读全文
posted @ 2021-01-05 11:16 acmloser 阅读(74) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集+枚举 错误思路: 接收了所有的判断语句,当出现矛盾的时候玩游戏的两人犯规次数+1,输出犯规最多的人. 很明显错在有裁判的关系是不准确的,因为那段关系不能考虑 正确思路: 枚举每个可能为裁判的人,如果可能为裁判的人>1,则不能确定;如果=1,则输出此人.如果==0,则impos 阅读全文
posted @ 2021-01-05 01:54 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 带权并查集 思路: 设置东西方向和南北方向两个数组,其他就和之前的题目一样,但是要注意我们压缩路径的时候要把东西和南北距离都压缩 1 #include <iostream> 2 using namespace std; 3 const int N = 40010; 4 int p[ 阅读全文
posted @ 2021-01-04 19:42 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 带权并查集 做了银河英雄传说和奇偶游戏后这题应该算简单了,没加入集合的加入集合,已入集合的检验就行了 1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 using namespace std; 5 阅读全文
posted @ 2021-01-04 09:34 acmloser 阅读(84) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集+位运算+前缀和思想+离散化 如果没想到前缀和这题完全没得思路,看了lyd大佬的提示,配合自己画图把这题做出来了= = 思路: 要AC本题我们需要前缀和思想,如果一个区间内1的个数为even,那么我们可以发现sum[r]-sum[l-1] = 偶,根据奇偶规律,我们可知这两个奇 阅读全文
posted @ 2021-01-04 01:21 acmloser 阅读(205) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集+贪心或堆排序+贪心 因为最近在做并查集专题所以直接考虑用并查集写,但是看题目完全没有想到用并查集的方式,以前写的并查集题目关系的传递性都很明显,但是这道题本蒟蒻完全没看出来 思路: 用并查集维护天数,贪心策略是能多晚卖出就多晚卖出,起初每个天数都在它自己的集合里,当我们决定要 阅读全文
posted @ 2021-01-03 22:04 acmloser 阅读(78) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 并查集+离散化 错误思路1: 在线处理,每次收到新的命令就判断对错,不知道在线处理能不能行,但是在线有个麻烦的点是要判断这个数字是否在alls里面出现过,如果出现过判断多错,没有就是要新加入关系.并且在线处理还需要标记哪些变量不能相等 错误思路2: 将1~N的数字全部赋值p[i] 阅读全文
posted @ 2021-01-03 20:20 acmloser 阅读(86) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 并查集 通过这道题算是把食物链没搞懂的问题又弄明白了点 很明显根据题意我们需要维护一个距离数组,表示父节点到子节点的距离. 当操作是C的时候,我们实际上在进行C操作之前是进行过路径压缩的,因此d[x]的距离变成了x到根节点的距离,d[y]的距离就算y到根节点的距离,因此两者的距离差 阅读全文
posted @ 2021-01-03 14:39 acmloser 阅读(91) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集的基本应用 想到了再建一个敌人数组,但没想到怎么操作...菜是原罪 正确思路: 如果是朋友,我们直接并入一个集合 如果是敌人,我们需要建立一个N叉树,分支是敌人数组的下标,里面的值是根,比如e[5] = 1,表示根为1,分支为5的树,n次操作后,我们会形成一个n叉树,此时我们需 阅读全文
posted @ 2021-01-03 12:27 acmloser 阅读(108) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: 并查集基础 和前面suspects差不多的题目,就是将计算集合内人数换成计算集合个数,用数组标记集合的编号即可 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace st 阅读全文
posted @ 2021-01-03 10:45 acmloser 阅读(123) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集基础 在读入学生团体的时候,没必要用数组存储,直接将他们并入树中即可,注意:当我们计算人数的时候,已经在一个集合中的人不能重复计算 当时看y总犯了这个错误,结果自己写又错了233 1 #include <iostream> 2 #include <cstdio> 3 using 阅读全文
posted @ 2021-01-03 10:14 acmloser 阅读(55) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:并查集基础 思路: 只有维修后的电脑才是有用的,因此我们用数组来标记维修后的电脑,当它们能连通需要以下条件: x电脑和y电脑都是维修后的 x电脑与y电脑距离的平方小于d*d 如果距离大于d*d,那么它们之间存在中介点,且中介点也被维修过 1 #include <iostream> 2 阅读全文
posted @ 2021-01-03 09:15 acmloser 阅读(82) 评论(0) 推荐(0) 编辑
摘要:原题链接 并查集模板题 当两个点互相可达,我们称它们连通.本题判断连通点的个数,就是判断同一集合下点的个数,一棵树下子节点各不同,因此用数组sizes记录下标为根节点的点的个数 1 #include <iostream> 2 using namespace std; 3 const int N = 阅读全文
posted @ 2021-01-03 07:59 acmloser 阅读(127) 评论(0) 推荐(0) 编辑
摘要:原题链接 Trie+位运算+前缀和思想+后缀和思想 错误思路: 如果枚举两个端点,结果还是会TLE,就算先预处理每个sum[i]对应异或的最大值,排序,考虑到最坏情况结果时间复杂度还是会到10的10次方,因此此解不可行 正确思路: 本道题要求两个区间内的异或最大值,我们可以用一个数组ans[i]记录 阅读全文
posted @ 2021-01-02 19:41 acmloser 阅读(184) 评论(0) 推荐(0) 编辑
摘要:原题链接 Trie+位运算 和前面差不多的题,但是注意一下i、j、k都是不同的,在找异或最大值的时候要把i、j从树上删除,枚举完后再加回来 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace 阅读全文
posted @ 2021-01-02 19:25 acmloser 阅读(93) 评论(0) 推荐(0) 编辑
摘要:原题链接 Trie+位运算 和前面题一样标记下删除的路径即可 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N = 200010; 6 int idx 阅读全文
posted @ 2021-01-02 19:23 acmloser 阅读(81) 评论(0) 推荐(0) 编辑
摘要:原题链接 想在vj上做来着..结果vj半天登不上去... 错误思路: 暴力枚举TLE 错误思路2: 用cnt数组标记用了的数字,但注意如果我们只标记叶子结点,那么就会陷入死循环,因为每次都要走到底才能知道是否能用 正确思路: 用cnt数组标记当前结点的子节点的个数,因为可能存在重复数字,所以不能简单 阅读全文
posted @ 2021-01-02 11:03 acmloser 阅读(107) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:Trie+位运算 错误思路1: 枚举端点异或,这样肯定TLE 错误思路2: 利用前缀和思想,区间[i,j]内异或 = sum[i-1]^sum[j],将所有sum值插入树中枚举一个点,另一个利用之前的sum xor的思想,但是这样是错的,我们要取sum的下标,但数据量大的时候存在相同 阅读全文
posted @ 2021-01-02 09:01 acmloser 阅读(156) 评论(0) 推荐(0) 编辑
摘要:原题链接 Trie+位运算 错误思路: 枚举数组里每一个数与询问的数异或,利用桶排序求最小值.时间复杂度O(n^2),TLE 正确思路: 想AC本题首先要明确几个性质: x^y^z = x^(y^z) 0~n位二进制数与n位二进制数异或的结果仍然在0~n位二进制数内,且不存在不同数取相同值的结果 3 阅读全文
posted @ 2021-01-01 22:31 acmloser 阅读(109) 评论(0) 推荐(0) 编辑
摘要:原题链接 Trie的基本运用 错误思路: 将要查找前缀的字符串构建字典树,这样的结果是每个字符串都要重新构建一次树,并且我们需要预先保存要匹配前缀的单词,但题目单词数目没有讲明,所以我们必须将建树的字符串互换.(这样建树会导致MLE) 正解思路: 将前缀建树,如果达到一个结点有单词就+1,如果没有单 阅读全文
posted @ 2021-01-01 16:12 acmloser 阅读(109) 评论(0) 推荐(0) 编辑
摘要:原题链接 字典树模板题 错误思路: 很容易看出枚举两个数字必定TLE,但这题求最值必须枚举一个数,因此我们可以在枚举第二个数进行优化 正确思路: 在枚举第二个数时,将第一个数的每一位分开贪心求解,将范围内的数全部插入字典数中,查询是否能获得高位尽量与第一个数相反的数 1 #include <iost 阅读全文
posted @ 2021-01-01 14:07 acmloser 阅读(77) 评论(0) 推荐(0) 编辑
摘要:原题链接 KMP+标准化+最大最小表示法 错误思路: 看到这题的第一反应是破环成链思想,枚举它能循环得到的字符串...算了下时间复杂度大概率TLE,看了别人的提示才反应过来是标准化... 正确思路: 像这种一种表示多种形态的字符串大概率用标准化了,我们用最小最大表示法求最大或最小值,用set或map 阅读全文
posted @ 2021-01-01 10:17 acmloser 阅读(103) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察: KMP+字符串的最小最大表示法 如果不懂字符串的最小最大表示法走这:GO (我认为是讲得很详细的) 当我们利用字符串的最小最大表示法求最小值和最大值下标后,直接利用next数组求循环节即可(如果最小/大值在循环字符串里出现多次,那么此字符串就可以构成循环节,并且循环节长度小于字符串 阅读全文
posted @ 2021-01-01 09:21 acmloser 阅读(79) 评论(0) 推荐(0) 编辑