随笔分类 -  ACM

大二到大三不堪回首的记忆....
摘要:原题链接 考察:最短路 错误思路: floyd,肉眼可见的超时(但是有用floyd过的,tql) 正确思路: spfa+两次建图 正向建一次反向建一次,这样就是单源最短路 1 #include <iostream> 2 #include <queue> 3 #include <cstring> 4 阅读全文
posted @ 2021-01-20 17:32 acmloser 阅读(50) 评论(0) 推荐(0)
摘要:原题链接 考察:最小生成树或最短路 这类题型感觉终于搞懂了一点...蒟蒻落泪 这里还有道和本题差不多的题GO 思路: 我们要让最小边权最大,也就是我们尽量走权大的边.spfa更新dist数组时,要赋值大值.但同时我们也需要让这条路径边权最小,也就是这条语句: dist[i]<min(g[t][i], 阅读全文
posted @ 2021-01-20 16:37 acmloser 阅读(47) 评论(0) 推荐(0)
摘要:原题链接 考察:构造+组合数学 错误思路: 暴力枚举1 33 的个数,通过一些剪枝操作得到各自的长度,我们暴力枚举个数,通过它们组合数==n来求解字符串. 但是注意: 但是注意求解组合数==n.如果n为>1e5的质数(拆成3个因子只有1*N*1一组情况).那么甚至得不到解.但题目要求是一定有解的.因 阅读全文
posted @ 2021-01-20 02:45 acmloser 阅读(78) 评论(0) 推荐(0)
摘要:原题链接 真是绝了,做过差不多的判重思路的题下次判重还是想不起来,我果然fw 考察:dfs+图 思路: 利用二维数组判重,在for循环外面求最大路径,否则会少算一个结点 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 阅读全文
posted @ 2021-01-19 22:31 acmloser 阅读(46) 评论(0) 推荐(0)
摘要:原题链接 考察:约数 看题解说是常规数论题,本蒟蒻果然fw 错误思路: 暴力枚举,但是这一定TLE 正确思路: 这道题实质上就是求每个数的约数.时间复杂度O(N*√inf)大概10^8左右.这个思路比较容易想到.但是输出1、2....i个数的公约数就比较难(对本蒟蒻而言).实际上.我们统计完每个数的 阅读全文
posted @ 2021-01-19 17:20 acmloser 阅读(61) 评论(0) 推荐(0)
摘要:原题链接 考察:gcd(?)思想 这道题的递归很容易写.基本改改gcd模板就可以.但是这样会MLE.比如这样的数据:100000000000000和1.这样long long 要调用100000000000000次.而主函数的栈必然会爆掉.这道题用ll不优化递归过不了更别说unsigned long 阅读全文
posted @ 2021-01-19 16:58 acmloser 阅读(65) 评论(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 阅读(91) 评论(0) 推荐(0)
摘要:原题链接 考察:前缀和 2021.3.6 二刷写出来了,树状数组的题目做过这题就会很有灵感.... 错误思路: 求前缀和,再枚举左右端点,时间复杂度O(n^2),TLE 正确思路: 端点枚举不能优化.可以考虑推式子.要求的答案是(sum[r]-sum[l-1])%k==0.优化一下就可发现式子变成s 阅读全文
posted @ 2021-01-19 00:10 acmloser 阅读(72) 评论(0) 推荐(0)
摘要:原题链接 考察:递推 错误思路: bfs,会TLE,如果不判重的话会MLE.在最坏情况下字符串长度100,有99个不同的选择.假设一个起始字符串与目标字符串完全不同则起码50步.这50步每步都有99种选择.时间复杂度50^99 正确思路: 将起始字符串每一个间隔看成一个开关.当第一个字符不同,只能按 阅读全文
posted @ 2021-01-18 20:52 acmloser 阅读(57) 评论(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 阅读(75) 评论(0) 推荐(0)
摘要:原题链接 考察:快速幂 这题太无语了,如果合数在[2,n-1]范围内都符合等式,那么就是卡迈克尔数.我写了判断条件是随便一个符合就是卡迈尔数.但这很明显错了,存在合数有一些比它小的数符合条件而一些不合法的情况 1 #include <iostream> 2 using namespace std; 阅读全文
posted @ 2021-01-18 10:06 acmloser 阅读(82) 评论(0) 推荐(0)
摘要:原题链接 考察:GCD+前缀和思想 根据题意,最多允许一个区间和其他区间的距离不一样.因此在计算的时候我们需要去掉那个区间.那么剩下的区间取多大呢?可以发现:剩下区间要求的长度一定为它们的最小公倍数.这样才能凑得相等.假设剩下区间要求长度为k,区间需要增加的点数为len/k-1.因此最小的点数就是k 阅读全文
posted @ 2021-01-17 22:24 acmloser 阅读(81) 评论(0) 推荐(0)
摘要:原题链接 考察:质数筛+欧拉函数 正确思路: 列出下标从小到大列出欧拉函数的值,可以发现合数的欧拉函数值在前面一定有个比它小的质数取值与它相同.比如phi[4]=2,而在它前面phi[3]已经可以取值2.根据这条性质可以AC此题 易错: 不能只筛到1e6的质数.如果a[i]刚好取值1e6.那么就取不 阅读全文
posted @ 2021-01-17 19:00 acmloser 阅读(61) 评论(0) 推荐(0)
摘要:原题链接 考察:STL 错误思路: 用STL的set看是否重复,如果有重复就erase 起始迭代器直到不重复为止 该思路错在set自动排序啊啊!!! 应该可以用C++11的unordered_set.但是这道题可以只用set解 温故知识:set的erase元素可以删除迭代器所指向元素,也可以直接删除 阅读全文
posted @ 2021-01-17 17:07 acmloser 阅读(41) 评论(0) 推荐(0)
摘要:原题链接 数论的时间复杂度我真的越来越懵逼.....找个时间再琢磨一下 这道题枚举一定超时.将n分解质因数后也没找到什么规律.因此只能从gcd返回值入手.在int范围内约数最多是1536个.因此是可以枚举约数的 看了大佬的思路: 假设当前数字为i,设gcd(i,n)==k.那么为了简化计算.我们可以 阅读全文
posted @ 2021-01-17 15:58 acmloser 阅读(71) 评论(0) 推荐(0)
摘要:原题链接 考察:欧拉函数 orz...AcWing的例题再做一次不会做了..满脑子线性筛开不了那么大的数组.到把原公式忘了.... 其实不用筛质数.直接分解质因数即可 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 阅读全文
posted @ 2021-01-17 11:42 acmloser 阅读(104) 评论(0) 推荐(0)
摘要:原题链接 考察:欧拉函数+递推 数论的每一道题都是看书上的提示才做出来...orz 正确思路: 通过观察发现(要看题目给的图,自己画的图观察不出答案....),当gcd(x,y)==1时.这个点就可见.所以当x与y互质答案就++.考虑到互质可以想到欧拉函数.这道题大正方形的答案可以由小正方形推导出来 阅读全文
posted @ 2021-01-17 02:45 acmloser 阅读(95) 评论(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 阅读(120) 评论(0) 推荐(0)