妙啊
文章平均质量分 51
S atur
要变成萤火虫~
展开
-
E. Early Orders (单调栈&字符串子序列) (2021年度训练联盟热身训练赛第一场)
传送门 思路: 打cf知道原题回来补的,原本思路感觉和这个差不多,但是万万没想到用单调栈来直线就很简单了。 具体实现还是参考了大佬博客,简直不要太nice!(具体思路见代码注释。) #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lo原创 2021-03-26 11:13:28 · 187 阅读 · 0 评论 -
Codeforces D. GCD of an Array (map&set&维护多个数的gcd) (Round #705 Div.2)
传送门 题意:给你n个数和q次询问,每次询问给出i,x,让你在上乘以x并求出现在所有数的gcd。 思路: 都知道多数的gcd必定需要质因数分解,但是该题询问q次,如若每次都更改再循环的话必定超时。 这个题和2021牛客寒假算法基础集训营4的J题基础有些相似,也想过利用二维数组维护每个数的每个质因子的出现次数(用动态map)和最小次方数(用动态set方便取最小数和增删操作)。 但是考虑到时间空间的复杂度一直没有实现代码,赛后参考大佬博客才将代码实现,具体思路如下图和代码注释: 代码实现:原创 2021-03-08 15:01:01 · 203 阅读 · 0 评论 -
F. 组合数问题 (组合数推公式&逆元) (2021牛客寒假算法基础集训营6)
传送门 思路:学习大佬博客 根据数学上的组合数公式: ...................① ...................② 由①和②相加除以二可得到公式③: ............................................................③ 又因为,所以 ③ =. 又因为公式④: ...............................................④ 所以③和④相加除以二便得到了答案。 代码..原创 2021-03-06 16:14:01 · 193 阅读 · 0 评论 -
G. 机器人 (排序&__int128) (2021牛客寒假算法基础集训营6)
传送门 注意:题目描述的将机器人排序,指机器人之间交换,自身的a、b值依然不变。另外,题目中x=ai*x+bi,x在不断更新,最后得到一个答案x。 思路: 显然我们要将机器人按一定方式进行排序,以得到最大的答案。 嵌套公式可以得到公式,化简贪心一下就好。 另外需要注意会爆long long,所以需要用__int128。 代码实现: #include<bits/stdc++.h> //#define endl '\n' #define null NULL #define.原创 2021-03-06 15:37:24 · 264 阅读 · 0 评论 -
Codeforces C. Nezzar and Symmetric Array (#698 Div.2) (构造 / 思维)
传送门 题意:有一个数组a,由2n个不同的整数组成,对于每个都有一个使得 = −(1<=i,j<=2n)。 有一结果数组d,其 = ,现在给出这个数组d,能否找到对应的数组a。 思路: * 由于是找对称点,可以放在数轴上来讨论。为数轴上的点,为其与其他所有点的距离和。 * 不难发现,d值大的点在两侧,d值小的点在中间。由于是对称的,我们讨论一边即可。 * 不难发现:与间的距离= |-|。 = ( (点到其左侧所有...原创 2021-02-04 13:22:05 · 189 阅读 · 0 评论 -
Codeforces D. Nezzar and Board (#698 Div.2) (数学 / 裴蜀定理&gcd)
传送门 题意: 有 n 个不同的整数,每次操作选两个数 x 与 y ,新增一个数为 x*2-y; 试问是否能在经过多次操作后得到目标数字 k? 思路: 俺也不会!呜呜呜~ 俺好菜! 俺就是数学垃圾~ 观膜大佬博客! 避免后期大佬博客丢失,咱先截个图呗~ 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define p原创 2021-02-03 11:58:19 · 142 阅读 · 0 评论 -
Codeforces D. Journey (Round 103 Rated for Div.2) (思维 / 模拟 / 暴力扫)
传送门 题意: 有一排 0 到 n 的n+1个城市,现给出期间的 n 条道路方向,s[i] 表示第 i 个城市与第 i-1 个城市之间的道路。游客从一个城市向相邻的城市移动后,所有道路都会翻转方向,且每天游客都必须选择一条道路移动。现让你求出以没个城市为起点,都能最多经过多少个不同的城市。 思路: 要连续通行的道路必须是 "…LRLRLRLRL…"这样交替出现的。 往左再往右是毫无意义的,因为经过偶数次翻转后的道路又回到了最初的状态。 若要能向左通行,那么当前道路必须是 ‘L’,若要能向右通行, 那么下原创 2021-02-03 10:35:03 · 247 阅读 · 0 评论 -
Codeforces D. Cleaning the Phone (#697 Div.3) (二分 & 前缀和)
传送门 题意: 有 n 个软件,第 i 个软件占 a[i] 的内存, 但有 b[i] 的贡献;现让删除一些软件,使得释放的空间达到 m 及以上,但牺牲的贡献值又要最小,并输出牺牲的最小贡献值。 思路: 参考于大佬博客 根据贡献值分别为 1 和 2 将内存 a 分成 a1 和 a2两个组,肯定先删内存大的软件,再按照内存大小降序排序。 所以贡献值为 1 的 a1 内的软件优先被删除,再利用二分 + 前缀和的方法找到除了 a1 外 a2 内再删除多少个能使得删除内存经量大。 再得注意,也许只删除 a2 中最原创 2021-02-02 17:24:18 · 197 阅读 · 0 评论 -
CCPC 2020威海站 H. Message Bomb (差分&前缀和)
PTA重现赛入口 题意: 有 n个组(初始都为空组), m个学生, s个事件。每次事件输入t, x, y。 t == 1: 将学生x加入y组,保证之前不存在。 t == 2: 将学生x从y组中删除,保证之前存在。 t == 3: 学生x向y组中其他成员宣布一则事件。 试求每个学生接收到的事件数。 思路: 直接利用前缀和与差分的思维处理组员数的变化带来的改变。 数组 vg[i]表示第i组总共接收过的事件数,数组vs[i]表示第i个学生总共接收到的事件数,再利用m个set集合存 每个学生加入的队伍情况原创 2020-10-29 01:32:05 · 300 阅读 · 0 评论 -
Codeforces C. k-Amazing Numbers (#673 Div.2) (思维 / 区间枚举 / 最小前缀)
传送门 题意: 给出一个序列a,试问对于 1~n 的所有k,是否所有k长度的连续区间里的数都有共同的数交集,并输出这个数集中的min,否则输出 -1. 思路: 考虑相同数之间最少需要多长的k才能都包含到。枚举一个数和序列开头,中间数之间的差,最后一个数和序列结尾。 用一个ans[k]记录最少需要长度的k中最小的数字是哪个。ans[k]=min(ans[k],i)。 最后再维护下ans的最小前缀即可。 代码实现: #include<bits/stdc++.h> #define endl '原创 2020-09-28 23:36:35 · 317 阅读 · 0 评论 -
Codeforces E. Tree Queries (树 & dfs & 特定路径判断)
传送门 题意: 给你一个以 11 为根的有根树。每回询问 k 个节点v1 ,v2 ⋯vk。求出是否有一条以根节点为一端的链使得询问的每个节点到此链的距离均≤1.只需输出可行性, 无需输出方案. 思路: 这棵树以 1 为根,那么,这条路径要么经过给定点,要么经过给定点的父亲,要么经过给定点的至少一个儿子。 这时我们发现,经过以上三种点都必须经过给定点的父亲,于是我们就把题面转化为了:给定若干个点,求是否有一条从 1 开始的路径经过这些点。 按照深度排序后依次判断后一个点是否在前一个点的子树内即可。原创 2020-08-23 00:26:20 · 175 阅读 · 0 评论 -
Codeforces C. Uncle Bogdan and Country Happiness (树型递推)
传送门 题意: 给出一颗根节点为 1 的树,对于每个节点 i,有 p[i] 个人的家在节点 i 上。 一开始所有人都在根节点上,然后每个人会往家沿着最短路走。每个人出发时有一个心情,可能是好心情也可能是坏心情,在经过一条边时,心情可能由好变坏,但是不可能由坏变好。 每个点有一个幸福检测器,最后的检测结果为:所有经过该节点的人中,好心情的人数减坏心情的人数。 现在给出每个 h[i] ,问有没有可能最后每个节点的检测结果恰好为 h[i] 。 思路: 刚开始看完题就一头懵,有点点思路但还是太菜,码力不得行啊。原创 2020-08-22 21:26:12 · 196 阅读 · 0 评论 -
Codeforces F. Maximum White Subtree (树形dp)
传送门 题意: 给定一棵 n 个节点无根树,每个点都有一个颜色,非黑即白。现在问对于每个点 i 而言,选出一个 包含i的 连通块,使其白色点与黑色点的个数差最大(注意不是绝对值)。 1 ≤ n ≤ 2e5 ,0 ≤ a[i] ≤ 1 (a[i]为0表示黑色,为1表示白色) 。 思路: 因为我们需使cntw-cntb尽量大,可设定每个白色节点贡献值为1,黑色节点贡献值为-1。这样就转换成两次dp求出最大子连通块的权值和,分别为自底向上和自顶向下。 自底向上的话可直接维护dp[ i ],表示以点 i 为根原创 2020-08-19 00:02:52 · 223 阅读 · 2 评论 -
Codeforces D TediousLee (规律 / 树型递推计数)
传送门 题意: 给你一个建树规则: 级别1的有根死灌木是单个顶点。为了构造级别i的RDB,首先,我们构造级别i-1的RDB,然后对于每个顶点u: 如果您没有孩子,那么我们将添加一个孩子; 如果你有一个孩子,那么我们将增加两个孩子; 如果您有一个以上的孩子,那么我们将跳过它。 若出现含四个节点的根树(claw,如下图),且该四节点的爪子上的点都是绿色,则可将其都标记为黄色。 先给出n级别的树,试问最多能标记多少个黄色节点?答案对1e9+7取模。 思路: 其实推到5级别树便会发现一定规律,每个节点都可作原创 2020-08-17 20:39:48 · 207 阅读 · 0 评论 -
1009. Increasing and Decreasing (构造 / 最长递增(减)子序列) 2020 Multi-University Training Contest 7
传送门 思路: 题意: 让构造一个长度为n的序列,使得其最长递增子序列长度为x,最长递减子序列的长度为y。若无法构成自己输出 “NO”。 官方题解: cls代码思路: 将整个序列分成x块,每一块找一个元素出来形成的就是最长递增子序列;而递减序列正好是某一整块元素。 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #de原创 2020-08-11 22:48:11 · 949 阅读 · 4 评论 -
A. Groundhog and 2-Power Representation (递归 & 高精度) 2020牛客暑期多校训练营(第九场)
传送门 思路: 题意:将所给字符计算成十进制数。 常规的 递归处理 + 高精度 即可。 嗐,我太太太菜了,又是躺舒服的一天,模拟模拟不得行,递归也不行,只有赛后看看哥大佬的代码学习。 代码实现: #include<bits/stdc++.h> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowb原创 2020-08-08 22:51:16 · 178 阅读 · 0 评论