随笔分类 -  性质、技巧

摘要:要点 做法是删去连续的k个0或k个1,连消、消消乐的那种,网上博主用个栈$O(n)$就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以都挪到后面去 C++ / GYM 101981 E / include include using na 阅读全文
posted @ 2019-07-02 23:37 AlphaWA 阅读(251) 评论(0) 推荐(0)
摘要:要点 括号序列平衡度即树深度 的性质 相当于中序遍历,则两点间最浅的地方即是LCA 的性质 线段树维护$d(a) + d(c) 2 d(lca(a,c))$,一层层剥,思考维护这个量需要什么,结果维护一大堆。 C++ include include include using namespace s 阅读全文
posted @ 2019-07-02 23:31 AlphaWA 阅读(191) 评论(0) 推荐(0)
摘要:要点 官解使用的哈希,给每个数一个二维键值,这样每个排列就有唯一的键值,再预求一下所给数列的前缀键值,暴力寻找有多少个答案即可。 C++ include include include include include using namespace std; typedef long long ll 阅读全文
posted @ 2019-06-12 21:56 AlphaWA 阅读(207) 评论(0) 推荐(0)
摘要:要点 与cf 1168C相似的一点都是看某点x最远能拓展到哪里 看数据想要在logn内查询,考虑倍增步数 C++ const int maxn = 2e5 + 5, X = 5e5 + 5, LOG = 25; int n, m; int l, r; int dp[X][LOG];//点i走pow( 阅读全文
posted @ 2019-06-12 21:52 AlphaWA 阅读(265) 评论(0) 推荐(0)
摘要:要点 都在注释里了 C++ include include include include include using namespace std; typedef double db; const int maxn = 1e5 + 5; int n; db l, v1, v2; db a[maxn 阅读全文
posted @ 2019-06-11 09:24 AlphaWA 阅读(181) 评论(0) 推荐(0)
摘要:要点 序列是n个不同的数,则新学到的一种策略就是二分这个位置的答案,然后可以上下调。 神奇地只关注大于还是小于mid并赋值0、1,这样m个操作的排序就能用线段树维护了! 阅读全文
posted @ 2019-06-07 15:59 AlphaWA 阅读(228) 评论(0) 推荐(0)
摘要:关键是check。要注意到其实有了mid以后每个位置都是独立的,它能从哪走到哪是固定了的,只要从左到右尽量贪心压着最小值即可。 阅读全文
posted @ 2019-05-30 15:24 AlphaWA 阅读(236) 评论(0) 推荐(0)
摘要:要点 容易想到排序,然后对于每个数: 人的惯性思维做法是:$a[i] (rank1的+rank2的+…)$。然而解法巧妙之处在于直接把所有的加和当成一个系数,然后先假装所有情况系数都是1,接着往上加,树状数组记录着所有之前比它小的数的情况,只有这些小的数也同时存在的区间才会增大它的系数。而且只在乎数 阅读全文
posted @ 2019-05-30 14:51 AlphaWA 阅读(287) 评论(0) 推荐(0)
摘要:要点 二分答案,内部喜闻乐见的拖延策略:对于某个打折玩具,就选最晚的打折时间买,答案并不会变劣,只是购买时间的平移。 注意最晚时间不是预处理的东西,是二分内部的、在mid以内的最晚时间。 阅读全文
posted @ 2019-05-27 00:42 AlphaWA 阅读(242) 评论(0) 推荐(0)
摘要:要点 可以贪心选数量最多的那三个构造 二分的话里面的check我不太会。正解是既然当前答案为$k$个,那每个物品最多只会出现$k$次,多余的丢掉,剩下的总数如果大于等于$3k$则true。最后输出答案时也是小小技巧吧,用${1,1+k,1+2k}$组成一组,因为多于$k$个的都删了所以这三个一定不同 阅读全文
posted @ 2019-05-20 18:03 AlphaWA 阅读(167) 评论(0) 推荐(0)
摘要:AC通道 要点 思路:题解中将所求进行转化$$max\{相似度\} = max\{M 不相似度\} = M min\{不相似度\}$$因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取最小不相似度最大的那个。 方法:转化后就可以运用广搜得到所求,即从起始串开始修改某一位,第一次得到此 阅读全文
posted @ 2019-05-01 23:40 AlphaWA 阅读(120) 评论(0) 推荐(0)
摘要:构造模拟要分情况讨论感觉不是够本质,然后官解是因为只有四个量所以可以根据限制条件列两个方程,再枚举一下解就可以了。 C++ const int maxn = 5000 + 5; int n, c[maxn], a[maxn]; vector zero, two, cl, ac, ans1, ans2 阅读全文
posted @ 2019-04-12 22:18 AlphaWA 阅读(161) 评论(0) 推荐(0)
摘要:要点 假设第i个最后总共选的值为ci,不妨把它分成两部分:$$c_i=cnt'_i L+q_i$$$$L=840,\ 0 W; rep(i, 1, 8) cin cnt[i]; memset(dp, 1, sizeof dp); dp[0][0] = 0; rep(fakei, 0, 7) { re 阅读全文
posted @ 2019-04-11 22:16 AlphaWA 阅读(362) 评论(0) 推荐(0)
摘要:自己水平太低,不丢人。 结论是最后选取的数后缀一定是若干个9,暴举即可。然而暴举也有暴举的艺术。 C++ ll n; ll dfs(ll n) { if (n == 0) return 1; if (n n; cout 阅读全文
posted @ 2019-04-10 00:45 AlphaWA 阅读(251) 评论(0) 推荐(0)
摘要:题目传送 排序看一看。 关键点在于发现性质: 算一个点的贡献时: 1.与后一个有重叠。$$当 a[i] + r = a[i + 1] + l, 即 r l = a[i + 1] a[i] 时$$a[i] 与 a[i+1] 重叠的部分,都算在a[i+1]里,则a[i]的贡献为:a[i+1] a[i] 阅读全文
posted @ 2019-04-07 11:44 AlphaWA 阅读(372) 评论(0) 推荐(0)
摘要:可以变换坐标:x' = x, y' = y - x ^ 2,如此之后可得线性函数x' * b + c = y',可以发现两点连边为抛物线,而其他点都在这条线下方才满足题意,故而求一个上凸壳即可。 阅读全文
posted @ 2019-04-06 01:35 AlphaWA 阅读(282) 评论(0) 推荐(0)
摘要:1.先预处理出在循环中某数前面的数是谁。 2.读入a数列时贪心选取最晚的父亲。 3.链上倍增预处理二进制祖先。 4.对于每个位置,预处理第n-1个祖先位置最早要从哪里开始,技巧上再顺手与前一位的最早位置取max,尽量缩小区间。 5.查询已经可做。 阅读全文
posted @ 2019-04-05 21:22 AlphaWA 阅读(268) 评论(0) 推荐(0)
摘要:听队友说过结论:a^n + b^n = c^n在n > 2时无解。 勾股那里本菜数学不好直接暴举了Orz。 跟大家学一波勾股数的构造:a是奇数时,tmp = a / 2; b = (tmp + 1) * tmp * 2; c = b + 1; 举例:5、12、13. a是偶数时,tmp = a / 阅读全文
posted @ 2019-04-03 23:58 AlphaWA 阅读(320) 评论(0) 推荐(0)
摘要:传送门 b^ c >= b - c,这个结论应该记住,我还在这里证过…… 这个题就用到了这个结论,假如当前答案集合为S,和为a,异或和为b,当前答案为a+b了。这时又读入个c,该不该加进来?a + c + b^c >= a + c + b - c == a + b,所以一定会使答案不变或更优,所以最 阅读全文
posted @ 2019-03-16 09:20 AlphaWA 阅读(165) 评论(0) 推荐(0)
摘要:Description 对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么? Input 一个数N(1<=N<=2, 阅读全文
posted @ 2019-01-04 09:40 AlphaWA 阅读(388) 评论(0) 推荐(0)