07 2021 档案

摘要:题意 构造一个长度为 n 的字符串,满足所有子串在原序列中都只出现了奇数次。字符串长度 n<=3e5 。 Solution: 考点:构造+思维。 thinking… 乍一看非常棘手。 因为字符串的长度很长,所以很难构造。 但是当字符串种类很少时,很难找到反例。 考虑这样一个特殊字符串: aaaaa. 阅读全文 »
posted @ 2021-07-30 22:32 仰望星空的蚂蚁 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题意 给你两个整数 n 和 m ,求集合的 mex 。n,m<=1e9 。 Solution: 考点:二进制+模拟。 本人打的 数位 dp 。反正打着很恶心的模拟。 看了标算后豁然开朗:n^x=k <=> n^k<=m 。所以我们只需要检查第一个 n^k>m 的数即可。因为要 k 最小,所以从高到低 阅读全文 »
posted @ 2021-07-30 22:24 仰望星空的蚂蚁 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题意 有 n 个物品,每个物品有 m 个特征,每次询问一个特征,求最少多少次能确定所求物品。 Solution: 考点:状压 dp 。 首先不能暴力枚举,这样第二个样例输出 5。但是它启发我们当某一组特征 cnt[S]=1 时答案是唯一的。 因为决策是变化的,所以考虑设 dp[S][T] 表示当前问 阅读全文 »
posted @ 2021-07-30 17:26 仰望星空的蚂蚁 阅读(8) 评论(0) 推荐(0) 编辑
摘要:题意 给你一个 01 矩阵,一条从左上到右下的路径,可以表述为 DR 的字符串和 01 串。构造填数方案,满足 DR 串小的 01 串一定大。 Solution: 考点:数学+搜索+找规律/推式子。 算法一. 性质一: 对于任意 (i,j) 满足 b[i][j]<=b[i-1][j+1], 因为只有 阅读全文 »
posted @ 2021-07-29 23:28 仰望星空的蚂蚁 阅读(43) 评论(0) 推荐(0) 编辑
摘要:题意 给你一个长度为 n 的 01 序列,每一个数位是 0 当且仅当 (a*i+b) mod n < p 。求长度为 m 的 01 串出现了几次。 Solution: 数论+集合求交。 首先考虑互质,所以 a*i 互不相同。如果我们枚举序列开头 x ,可以得到 m-1 个关于 a*i 模 p 意义下 阅读全文 »
posted @ 2021-07-29 00:09 仰望星空的蚂蚁 阅读(17) 评论(0) 推荐(0) 编辑
摘要:题意 给你一个字符串,问你操作后的最长串的最小值。 Solution: 首先考虑 dp 。由 k<=17 想到状压 dp ,但是字符集太大 2^17 ,而字符串长度 2e5 ,所以不太好直接做。 二分答案。转为判定 mid 是否成立。还是观察到 k<=17 ,考虑枚举先后匹配顺序,因为只需要匹配 k 阅读全文 »
posted @ 2021-07-28 18:36 仰望星空的蚂蚁 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题意 给定一个序列 a[] 和初始起点 s ,每次从 i 位置跳跃到 j 要满足 d-k<=abs(a[i]-a[j])<=d+k ,每次询问给出 k 和目的位置 x ,询问是否可行。 n,m<=2e5 。 Solution: 从定义想到连边。那么本题就是求最小生成树。边数为 n^2 ,考虑 bor 阅读全文 »
posted @ 2021-07-28 15:03 仰望星空的蚂蚁 阅读(8) 评论(0) 推荐(0) 编辑
摘要:CF1551D1 Domino (easy version) 考点:数学+分类讨论。 先考虑竖着的情况。显然每次选择两个相邻的列使得行数减少 1 。最后每一列的行数都必须是偶数。分奇偶讨论即可。 #include<bits/stdc++.h> #define ll long long #define 阅读全文 »
posted @ 2021-07-27 23:46 仰望星空的蚂蚁 阅读(6) 评论(0) 推荐(0) 编辑
摘要:CF1553D. Backspace 考点:尺取法+贪心。 贪心策略是尽量选最多。因为 L1 和 L2 奇偶性相同,所以选前面一段一定更优。 然后是开头段的情况,这个可以直接算, (n-m)&1 。 #include<bits/stdc++.h> #define fi first #define s 阅读全文 »
posted @ 2021-07-26 16:52 仰望星空的蚂蚁 阅读(5) 评论(0) 推荐(0) 编辑
摘要:C - LCM of GCDs 考点: map + 暴力枚举 #include<bits/stdc++.h> #define fi first #define se second #define ll long long #define PII pair<int,int> #define All(x 阅读全文 »
posted @ 2021-07-26 09:33 仰望星空的蚂蚁 阅读(4) 评论(0) 推荐(0) 编辑
摘要:前言 主要讲一下 F 题。E 题是一个爆搜,模拟连通块用 map 去重即可。 F - Rectilinear Polygons 首先看到题意是比较晕的。 考虑 m=4 的情况,可以离散化排序 x 坐标,用树状数组维护即可。 多边形就不会了 qwq 。能不能也用树状数组完成区间修改呢? 来看这个图,我 阅读全文 »
posted @ 2021-07-25 13:55 仰望星空的蚂蚁 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题意 定义一个可重集合 s ,一次操作为将 s 中最大值减去 p 。 小 L 想知道,如果给你 s 和 p 以及操作次数 k ,你能求出最后的集合吗? k<=10^18 。 Solution: 因为思路比较有借鉴意义,所以写了。 首先 k 的范围不允许模拟。考虑到最大值有单调性,所以二分最终序列最大 阅读全文 »
posted @ 2021-07-24 22:49 仰望星空的蚂蚁 阅读(9) 评论(0) 推荐(0) 编辑
摘要:前言 在家闲着没事打牛客,发现自己被虐了。。。 好像别人的做法都很妙的样子。。。 A. 括号串 模拟题。 判断所给字符串合法等价于: 括号完全匹配A 串是 B 串的子序列 题意很扯淡。我最开始看到字符串长度可以比最小的小,可以删除 qwq 。 #include<bits/stdc++.h> #def 阅读全文 »
posted @ 2021-07-24 17:19 仰望星空的蚂蚁 阅读(7) 评论(0) 推荐(0) 编辑
摘要:文艺平衡树 注意到本题是按位置比较大小,val 值不满足二分查找性质,所以不存在 GetRank(Rt,val) 函数。 #include<bits/stdc++.h> #define INF 0x3f3f3f3f #define ll long long using namespace std; 阅读全文 »
posted @ 2021-07-23 21:29 仰望星空的蚂蚁 阅读(3) 评论(0) 推荐(0) 编辑
摘要:简述 用于优化于深度状态有关的 dp 转移,时空复杂度均为 O(n) 。其中每个节点的状态是用指针分配内存。 CF1009F Dominant Indices 题意:设 d(u,x) 为 u 子树中到 u 距离为 x 的节点数。对于每个点,求一个最小的 k,使得 d(u,k) 最大。 #includ 阅读全文 »
posted @ 2021-07-23 16:35 仰望星空的蚂蚁 阅读(13) 评论(0) 推荐(0) 编辑
摘要:前言 本博客偏 math。 Valera and Swaps 构造一个操作序列,每次 swap(p[i],p[j]) ,使得最终序列经过最少 k 次操作后能使每个 p[i]=i 。输出字典序最小。 结论1. 连边 i->p[i],则 操作数=n-环的个数 。 正确性显然。 分类讨论: 若 cnt<k 阅读全文 »
posted @ 2021-07-23 09:11 仰望星空的蚂蚁 阅读(21) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> #define ll long long using namespace std; const int mx=2e6; const int mod=1e9+7; int n,m; ll res,fac[mx+5],inv[mx+5]; //相同的字符 阅读全文 »
posted @ 2021-07-22 09:26 仰望星空的蚂蚁 阅读(4) 评论(0) 推荐(0) 编辑
摘要:学到了一些 trick 。虽然考场上只做了 3 道题。 C. The Union of k-Segments 比较棘手的是 l[i]=r[i] 的情况,此时线段退化成了点。 这里提供一个不用分类讨论的做法。 首先离散化,然后 把离散化的值乘2 ,这样构建了一些中点。 对于修改 [l,r] 等价于 u 阅读全文 »
posted @ 2021-07-21 22:03 仰望星空的蚂蚁 阅读(4) 评论(0) 推荐(0) 编辑
摘要:#include<bits/stdc++.h> #define mp make_pair #define PII pair<string,int> #define pb push_back #define vec vector #define All(x) x.begin(),x.end() #de 阅读全文 »
posted @ 2021-07-21 10:05 仰望星空的蚂蚁 阅读(5) 评论(0) 推荐(0) 编辑
摘要:简述 有 n 个变量,每一个变量有且仅有 0/1 两种取值。通过高效建边,可以用 tarjan缩点 算法在 O(m) 时间内解决。 实现 关键:建边。 定理1: 证明:该定理是对缩点后的 DAG 按拓扑序自底向上进行选择、删除得到的结论。换句话说,如果当前强联通里的点有的已经选择了,那么整个强联通都 阅读全文 »
posted @ 2021-07-20 22:14 仰望星空的蚂蚁 阅读(20) 评论(0) 推荐(0) 编辑
摘要:E. 题意:求最小生成树。 Solution: 数论+生成树。 我们将尝试快速模拟 Kruskal 算法的过程。 发现在第 i 个状态,假设操作前有 A 个联通块,操作后 B 个块,那么代价等于 (A-B) * c[i] 。 考虑 w 和 v 联通等价于:w=v+k1a1+k2a2+ ... +k_ 阅读全文 »
posted @ 2021-07-20 21:56 仰望星空的蚂蚁 阅读(7) 评论(0) 推荐(0) 编辑
摘要:简介 树上启发式合并简称 dsu on tree ,其思想在于 暴力跑轻儿子的贡献 ,同时用桶记录下 重儿子的贡献 ,可以用于一类树的统计问题或 dp 优化,可以做到时间复杂度 O(nlogn) ,空间复杂度 O(n) 。 引入 直接讲实现方法吧。毕竟其他方法都没有实际意义。 Part 1. 预处理 阅读全文 »
posted @ 2021-07-20 08:22 仰望星空的蚂蚁 阅读(3) 评论(0) 推荐(0) 编辑
摘要:A. 状压 dp 。考虑到合并和分裂是互逆操作,所以只需要考虑合并操作。 trick: 将 b[i] 设置为 -b[i] ,题目转化为对一个序列,找到尽量多的和为 0 的集合。暴力转移是 O(3^(n+m)) ,我们考虑优化转移。 注意到 sum=0 时贡献加一,可以设计出如下转移方程 : dp[i 阅读全文 »
posted @ 2021-07-19 22:28 仰望星空的蚂蚁 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目大意:在黑板上又一个序列,每次操作可以选择一个数减1,或者是合并两个数,一个数被减至1则自动消除,不能操作者输。 解题思路:结论,对于大于1的数可以看成是一个整数s,为消除他们的总操作步数,包括减1以及合并,c为列中1的个数,如果s>2的话,c或者是s为奇数则为必胜,否则必败。若s≤2的话(s= 阅读全文 »
posted @ 2021-07-17 20:42 仰望星空的蚂蚁 阅读(32) 评论(0) 推荐(0) 编辑
摘要:[POI2010]GIL-Guilds 比较显然。只要我们保证对于每一个节点都是由颜色不同的点转移过来即可。只需进行一次 dfs ,时间复杂度 O(n) 。 [POI2005]SKA-Piggy Banks 不难发现每个点都有且仅有一个出边,所以这个图只能是若干个 环+单链 组成。用并查集数一下联通 阅读全文 »
posted @ 2021-07-16 22:32 仰望星空的蚂蚁 阅读(119) 评论(0) 推荐(0) 编辑
摘要:题意 从集合中选一个非空子集,若满足 a_ia_j+b_ib_j=0 ,i!=j 则不合法。求方案总数。n<=5e5 。 Solution: 稍作变形:a_i/b_i=-b_j/a_j 做到这里,我们把 a_i/b_i 存入 map ,然后在 map 中查找一个值,计算另一个值即可。每一对的贡献为 阅读全文 »
posted @ 2021-07-13 21:46 仰望星空的蚂蚁 阅读(68) 评论(0) 推荐(0) 编辑
摘要:题目描述 给定一个二维平面和一些栅栏,求其中包含点 (0,0) 的封闭图形面积。n,m<=1000 。 Solution: 模型转化 。首先考虑把横纵坐标离散化,将二维平面转化成网格图。 显然总面积可以由若干矩形拼成,所以只要 BFS 求出哪些点可达。对于点 (i,j) 可达,面积为 (X[i+1] 阅读全文 »
posted @ 2021-07-13 21:23 仰望星空的蚂蚁 阅读(124) 评论(0) 推荐(1) 编辑
摘要:E. 题意:给定一个初始字符串,可以把它接龙下去,最后无法操作的人判负。若双方都采用最优策略,即先保证自己不输,再击败对方,输出博弈结果。 n<=2e5 。 Solution: 这是一道图论的博弈问题,考虑回溯 + 逆推。 首先这个平局很难判断,我们不妨先求出必胜或必败的状态,如果两者都不是,则说明 阅读全文 »
posted @ 2021-07-11 12:06 仰望星空的蚂蚁 阅读(13) 评论(0) 推荐(0) 编辑
摘要:A. 一句话题意:在纸上写一个数字 n,双方每次选择 n 的一个因数,然后划掉 n 并在纸上写下 n减去这个数字的差 使之成为新的 n,最后写数字 0 的人输。Alice 先手,请请你判断谁会获胜。 Solution: 典型的 SG 函数。打表可以发现若 n 是偶数,则先手必胜;若 n 是奇数,则先 阅读全文 »
posted @ 2021-07-10 10:12 仰望星空的蚂蚁 阅读(5) 评论(0) 推荐(0) 编辑
摘要:题意 求出在一个字符串 s s s 中插入 n n n 个小写字母,有多少不同的结果。 n ≤ 1 0 6 n\leq 10^6 n≤106 。 solution: 神仙计数题。本题可以等价转化为,有多少长度为 n + m n+m n+m 的字符串存在子序列串 s s s 。为了避免算重,我们规定如 阅读全文 »
posted @ 2021-07-09 16:06 仰望星空的蚂蚁 阅读(9) 评论(0) 推荐(0) 编辑
摘要:没啥好说的,直接上模拟。 首先,我们找到第一个分隔的标识符,然后用 std::s.substr 提取所需要的 string 串,判断是否是整数;再把剩下的串提取出来,重复上述操作即可。注意判断整数时要注意前导零和单个 0 的情况。 #include<cstdio> #include<string> 阅读全文 »
posted @ 2021-07-08 20:00 仰望星空的蚂蚁 阅读(4) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示