牛客
文章平均质量分 70
记录牛客的题目
Happig丶
我的孤独,虽败犹荣
展开
-
B - Mr.Maxwell and attractions(贪心+优先队列)
传送门题目大意有两种活动a,ba,ba,b,数量分别是n,m(1≤n,m≤1e5)n,m(1 \leq n,m \leq 1e5)n,m(1≤n,m≤1e5),每天只能在上午或者下午选择一种活动进行,每种活动可以重复选择但被选择一次后权值就会变为原来的60%60\%60%,特别地bbb类活动在下午被选择时只能得到其权值的80%80\%80%。现在有TTT天,其中限制最少选择k(1≤k≤T≤1e5)k(1 \leq k \leq T \leq 1e5)k(1≤k≤T≤1e5)天下午,问最终能得到的最大权原创 2021-05-08 16:40:27 · 151 阅读 · 0 评论 -
G 牛牛与比赛颁奖(离散化+差分)
传送门题目大意n(n≤1e9)n(n \leq 1e9)n(n≤1e9)只队伍比赛,共有mmm道题,每道题过的人数都是连续的区间[l,r][l,r][l,r],给出发奖牌的规则:先将所有人按过题数降序排列,然后取第⌈n10⌉\lceil \frac{n}{10} \rceil⌈10n⌉名的过题数为金牌线,⌈n4⌉\lceil \frac{n}{4} \rceil⌈4n⌉名的过题数为银牌线,⌈n2⌉\lceil \frac{n}{2} \rceil⌈2n⌉名的过题数为铜牌线,大于等于某个线的过题数原创 2021-02-24 00:16:11 · 152 阅读 · 1 评论 -
F 牛牛与交换排序(双端队列)
传送门解题思路给出1−n1-n1−n的排列,首先确定一个kkk,然后可以每次操作kkk个数将顺序颠倒,但是每次操作的左端点必须不小于上一次操作的左端点。问能否将kkk个数变成升序并输出kkk。题目大意手玩几个例子不难发现,实际上kkk一开始就能确定,因为可操作子序列的左端点不断右移,那么这个过程中我们只能从111开始依次恢复原位,因此第一个没有归位的数和其现位置所在的距离就是kkk。确定了kkk之后,实际上就是一个模拟的过程了,写暴力翻转的话虽然过了90%90\%90%的样例但还是TLETLET原创 2021-02-23 22:35:28 · 153 阅读 · 0 评论 -
D 牛牛与整除分块(打表找规律)
传送门题目大意给定nnn,求出集合S={⌊xi⌋∣i∈[1,n]}S = \{\lfloor \frac{x}{i}\rfloor | i \in[1,n]\}S={⌊ix⌋∣i∈[1,n]},然后对集合SSS去重并降序排序得到新集合S′S'S′。给定xxx,求⌊xi⌋\lfloor \frac{x}{i}\rfloor⌊ix⌋在集合S′S'S′中是第几大。解题思路...原创 2021-02-23 22:08:54 · 183 阅读 · 0 评论 -
B 武辰延的字符串(哈希+二分)
传送门题目大意给定两个字符串s,ts,ts,t,问有多少对sss的非空前缀使得这对前缀拼接后恰好组成ttt的一个前缀。解题思路明显两个sss的前缀若能组成ttt的前缀,那么必定有一个前缀s2s_2s2拼在另外一个前缀s1s_1s1后面,为了防止重复我们可以枚举s1s_1s1,显然s1s_1s1也是ttt的前缀。这时不难发现当ttt除去s1s_1s1后,若剩下部分t−s1t-s_1t−s1和sss的最长公共前缀的长度为lenlenlen,那么对答案的贡献就是lenlenlen,而且满足二原创 2021-02-20 14:03:37 · 121 阅读 · 0 评论 -
G 九峰与蛇形填数(链表+倍增)
传送门题目大意给出新“蛇形填数”的规则,一个n∗n(n≤2000)n*n(n \leq 2000)n∗n(n≤2000)的初始全为0的矩阵,有最多mmm次操作,每次操作可以让一个子矩阵进行一次蛇形填数,求出最终矩阵每个位置的数。解题思路先放上我的解法(似乎偏小众一点)对于每个位置,最终优先保存的是最晚进行的修改,这启发我们将询问倒着操作,每次操作时如果已经被填好的位置直接跳过,理想下每个位置只被操作一次,但是现实很残酷,如何跳过一个数?根据链表的思想,我们以行为主体,记录每行每个位置之前已经填好原创 2021-02-19 21:45:54 · 214 阅读 · 1 评论 -
D - 点一成零(二维并查集)
传送门题目大意给出一个n∗nn*nn∗n的01矩阵,选择某个连通块的其中一个1就能将这个块中所有的1都变成0,求每次将某个位置变为1后再将所有连通块都变为0的方案数(变为1后的位置会影响到下面的查询)。解题思路首先如果没有修改操作,也就是找到所有的连通块的个数cntcntcnt以及每个连通块中1的数量xix_ixi,答案就是cnt!∗∏i=1cntxicnt!*\prod_{i=1}^{cnt}x_icnt!∗∏i=1cntxi。然后考虑修改,假设修改位置已经是1那么就是上次的答案;如果是原创 2021-02-15 12:49:55 · 273 阅读 · 0 评论 -
B - 内卷(尺取)
传送门题目大意现在期末考试要给班上的nnn个人打五个等级A−EA-EA−E,现在限制评AAA的不能超过kkk个。给出每个人五个等级的预期分数,现在问我们如何评分使得所有人的最高分和最低分之差最小。解题思路题目很难懂,可能是没讲清楚,感觉好多疑惑无法解决。按照出题人的思路是,预估的AAA类分数不能打其他四个更低的等级,但是其他四个等级怎么打都无所谓。实际上本题解决的目的就是,寻找一个区间,使得区间内包含所有人的分数(每人至少一种)且只含有预估AAA等级分数的人不超过kkk个。那么先将所有的5∗n5*原创 2021-02-15 11:03:12 · 169 阅读 · 0 评论 -
H - 幂塔个位数的计算(欧拉降幂)
传送门题目大意定义运算(a,n)(a,n)(a,n)为aaa上面不断叠n−1n-1n−1个aaa作为幂,例如(2,4)(2,4)(2,4)等价于22222^{2^{2^{2}}}2222。给定a,n(1≤a,n≤10100000)a,n(1 \leq a,n \leq 10^{100000})a,n(1≤a,n≤10100000),求出其个位数。解题思路比较裸的欧拉降幂题目了,但是还是要先观察规律,首先根据欧拉降幂an%p=(a%p)n%φ(p)+φ(p)a^n \%p = (a\%p)^{n\%原创 2021-02-14 20:07:59 · 266 阅读 · 1 评论 -
E - 买礼物(链表+线段树)
传送门题目大意给出一个序列,有以下两种操作:1 x1~~x1 x:将位置xxx上的数删除。2 l r2~~l~~r2 l r:若该区间内有两个相同的数输出111否则输出000。解题思路很好的一道题,之前在洛谷写过查询区间内是否有两数相同是用莫队维护的区间种类数,但是本题如果写莫队估计要TLETLETLE,然后学到了这手很强的问题转化技巧:对于区间内的每个数,原创 2021-02-08 00:17:03 · 116 阅读 · 0 评论 -
B - 括号(构造)
传送门题目大意构造一个非空的括号字符串,包含正好 k,k≤1e9k, k \leq 1e9k,k≤1e9 个不同合法括号对。所谓括号字符串,是指由’(((‘和’)))'这两种字符构成的字符串。要求构造的字符串长度不超过100000。解题思路这题折磨了好久,一开始想的方法是将一个数分解为两个因子相乘,但是显然最坏的结果是2乘上一个大质数,那么肯定翻车。然后想到先找k\sqrt{k}k,令k=k∗k+resk = \sqrt{k}*\sqrt{k} + resk=k∗k+res,然后分解resr原创 2021-02-05 12:55:25 · 370 阅读 · 0 评论 -
A - 串(递推找规律/DP)
传送门题目大意求出长度不超过nnn,且包含子序列“ususus”的、只由小写字母构成的字符串有多少个。子序列,指一个字符串删除部分字符(也可以不删)得到的字符串。例如,"unoacsccunoacsccunoacscc“包含子序列”ususus",但"scscucuscscucuscscucu“则不包含子序列”ususus"。解题思路方法一方法二...原创 2021-02-05 12:04:38 · 257 阅读 · 0 评论 -
G - 贪吃的派蒙(贪心)
传送门题目大意给出一个序列ppp,每个数代表一个人要吃东西的数量。其中最大的数为派蒙,除了派蒙之外每个人每次能吃的数量为[1,pi][1,p_i][1,pi],派蒙每次固定的吃pmaxp_{max}pmax个。给定kkk个食物,问能否让派蒙之前的那个人恰好吃完。解题思路设派蒙前面的人能吃的数量范围是[a,b][a,b][a,b],那么如果a≤k≤ba \leq k \leq ba≤k≤b显然一定成立。否则就必须要让派蒙吃到东西,而派蒙前面的人恰好为分界点,也就是说把这里当做终点,设除了派蒙之外原创 2021-01-31 18:20:54 · 458 阅读 · 3 评论 -
2020牛客多校第二场 G - Greater and Greater(思维+bitset)
传送门题目大意给出一个长度为nnn的序列AAA,一个长度为m(m≤n)m(m \leq n)m(m≤n)的序列BBB,问序列AAA有多少长度为mmm的连续子序列SSS使得∀i∈[0,m),Si≥Bi\forall i \in [0,m),S_i \geq B_i∀i∈[0,m),Si≥Bi解题思路参考了如下博客链接,十分感谢!这样转化问题的方式真的很神奇,对每个BiB_iBi遍历AAA数组得到每个数相对于BiB_iBi的大小(用0,10,10,1表示)例如样例A=1,4,2,8,5,7A原创 2021-01-25 18:02:09 · 131 阅读 · 0 评论 -
牛客练习赛76 F - phi and phi(欧拉函数性质+莫比乌斯反演+差分)
传送门题目大意给定nnn,f(n)=∑i=1n∑j=1nφ(ij)φ(gcd(i,j))f(n) = \sum_{i=1}^n\sum_{j=1}^n \varphi(ij)\varphi(gcd(i,j))f(n)=∑i=1n∑j=1nφ(ij)φ(gcd(i,j)),求出[1,n][1,n][1,n]每个数的fff值输出。解题思路这道题有三个难点,我挂在了第一个…第一步:问题简化首先式子里的φ(gcd(i,j))\varphi(gcd(i,j))φ(gcd(i,j))看着很不爽,不按常原创 2021-01-18 21:42:55 · 236 阅读 · 0 评论 -
牛客练习赛76 E - 牛牛数数(线性基+二分)
传送门题目大意给出nnn个数,然后给定一个kkk,求出这nnn个数任何子集(非空集)的异或和得到的所有数中大于kkk的有多少个。解题思路看到任何子集的异或和,不难线性基,假设线性基中有cntcntcnt位元素不为000,那么显然得到的结果共有2cnt−12^{cnt}-12cnt−1个不同的数(有0的话就再加一),求有多少个大于kkk的数,显然可以数位DP,或者通过查询线性基异或的第KKK小的数,然后二分上界即可。下面代码是二分。#include <bits/stdc++.h>u原创 2021-01-18 11:30:07 · 210 阅读 · 0 评论 -
牛客国庆派对Day1 F - Light Emitting Hindenburg(常见位运算思路)
传送门题目大意虚假题意:&$&@(*$&@&#&…(万恶的国外题目,开了各种翻译都看不懂题,无语)真实题意:给出nnn个数,从中选出kkk个数使其作与运算得到的结果最大解题思路这种思路还是比较重要的,之前见到过更难的,也就是nnn个数里面选出kkk个数作异或使其异或和最大,这个需要用字典树维护,但是如果是与运算就不需要了,因为对于每一位来说只有所有的数全为111这一位才有贡献。具体思路为:从高到低考虑每一位,然后遍历所有可用的数,如果能选出大于等于kkk原创 2020-10-08 15:55:37 · 152 阅读 · 0 评论 -
牛客 黑白树(树形DP)
传送门题目大意给出一颗以111为根的有根无权树,初始时所有的点都为白色,当我们选择一个点使其变黑,那么该点到根节点的那条链中距离该点长度小于k[i]k[i]k[i]的所有点都会变黑(已经变黑的无影响),求将整棵树都变黑的最少操作次数。解题思路首先一个点变黑影响的点只会是从该点向着根的方向的点,这个过程显然提醒我们,在dfs回溯过程中的方向就是每个点向着根节点的方向。如果一个子节点我们假设涂黑,那么它的父节点如何判断选或者不选?我们设一个数组ddd表示当前已涂黑节点(该节点或者下方子节点被涂黑)能再原创 2021-01-15 16:58:53 · 344 阅读 · 0 评论 -
牛客算法周练——水题water(数论+n皇后位运算算法)
题目链接题目不难看懂,观察上述式子,给出了f(1)=1,f(2)=1,那么继续往后推几个,可以发现是斐波那契数列。因此对于上述式子如果x输入的x是斐波那契数的话,就直接求,方法详见传送门,对100之内的斐波那契数打表即可,因为第九十多个好像就到了1e18左右。如果该数不是斐波那契数,显然求n皇后问题,但是这里n最多到了13,普通的求解最多到12就跑不动了,因此使用位运算的算法打表即可(不会自...原创 2020-04-15 13:26:56 · 188 阅读 · 0 评论 -
2020ICPC 小米 网络选拔赛第二场
比赛链接D - Determinant(行列式化简)题目大意给出行列式Mij={aibji≠jaibj+xi=jM_{ij} = \left\{\begin{array}{rcl} a_ib_j & i \neq j \\ a_ib_j+x & i = j \end{array}\right.Mij={aibjaibj+xi=ji=j,求行列式的值。解题思路这道题考了一个不太常见的点——行列式化简计算。比赛时队友推出来了我没推出来,课下好好总结了一下,见这里原创 2020-11-10 11:46:11 · 274 阅读 · 0 评论 -
2020ICPC·小米 网络选拔赛第一场
比赛链接前言第二场都快打了才补完题目发博客,最近事情真的太多了= =A - Intelligent Warehouse(DP+数论优化)原创 2020-10-30 09:16:39 · 431 阅读 · 1 评论 -
B - 树上子链 (带权树的直径,树形DP)
传送门最近在搞带权树的直径,搜到了这道题,就写一下吧首先不难发现是树形DP。这道题的状态应该是很好定义的,因为权值在点上而不是边上。首先考虑的一点应该是将这棵树变为有根树,那么设d(u)d(u)d(u)表示以节点uuu为根,延伸到子节点的最长路径的长度,因为题目说路径可以是节点本身,那么初始化就是这个点的权值。然后考虑状态转移方程,显然是考虑哪个叶子节点到该根节点的长度最长,那么就是d(u)=max(d(u),d(v)+w[u])d(u)=max(d(u),d(v)+w[u])d(u)=max(d(u原创 2020-08-19 09:58:26 · 623 阅读 · 0 评论 -
2020牛客暑期多校第九场 A - Groundhog and 2-Power Representation(栈/pyhton)
传送门很经典的括号表达式问题,我们可以将2(...)2(...)2(...)看做222对括号里的数求幂,除去括号的嵌套求幂前一定只有加法,然后最外层一定是加法,这样就能定义运算优先级和最后的求和得出答案,不经常写导致比赛时手生写的慢,特此回顾对于经典写法,考虑到最后的答案是大数因此写Javaimport java.math.BigInteger;import java.util.*;public class Main { static Stack<Character> st原创 2020-08-17 15:11:31 · 113 阅读 · 0 评论 -
2020牛客暑期多校第九场 K - The Flee Plan of Groundhog(思维+dfs)
传送门题目大意:给出一棵树,第一个人在1号节点,向n号节点走去,速度为1m/s1m/s1m/s,然后走了ttt秒后第二个人要以2m/s2m/s2m/s的速度去追第一个人,第一个人如何才能让第一个人尽可能地晚的追上。其中第一个人在ttt秒后可以保持不动思路首先要彻底理解题意,我觉得题目说的不是很清楚:首先第二个人是不能保持不动的,而且并不是只能到达距离它偶数的节点,奇数的同样可以到达,计算公式为(d[s]+1)/2(d[s]+1)/2(d[s]+1)/2;然后是ttt秒后第一个人所处的位置是确定的—原创 2020-08-15 22:06:31 · 105 阅读 · 0 评论 -
2020牛客暑期多校第九场 F- Groundhog Looking Dowdy(尺取)
传送门题目大意:给出nnn天,每天有若干件衣服,可以任选mmm天然后每天选出一件衣服,问如何选择使得选取的mmm件衣服中最大最小值的差值最小思路:如果我们不考虑天数,直接按权值排序,然后对于每个左边界,我们要找的就是恰好的第一个右边界使得这个区间内含有mmm种衣服,这个区间显然是可变化的。这个问题很明显就是经典的尺取问题啊(比赛时傻逼了想到开头却没想到尺取),我们只需要维护一个两个指针并用数组记录衣服的种类个数#include <bits/stdc++.h>#include <原创 2020-08-14 19:40:03 · 166 阅读 · 0 评论 -
2020牛客暑期多校第九场 E - Groundhog Chasing Death(gcd+质因数分解)
传送门题目大意:首先看到gcdgcdgcd就应该想到gcdgcdgcd的本质,即质因数分解后对于相同的质因子取min(p1,p2)min(p_1,p_2)min(p1,p2),而且不难发现对x,yx,yx,y求幂,不会影响质因子的种类,只是会改变指数,而且是以等差数列增长的。显然只需要一次质因数分解记录底数和对应指数,使用map记录相同的质因子以及各自初始对应的个数,然后考虑指数的变化显然我们只需要遍历aaa或者bbb的相同质因子从a−ba-ba−b(或者c−dc-dc−d)的数目作为初始值,原创 2020-08-14 11:39:54 · 126 阅读 · 0 评论 -
2020牛客暑期多校第十场 C - Decrement on the Tree(树的思维好题)
传送门题目大意:给出一棵生成树,每条边都有一个权值,现在每次操作可以任意选择两点间的一条路径然后将这条路径的权值都减一,问最少多少次能将所有边权值都减小到0。除此之外还问如果修改了某条边的权值,这个最小的次数是多少看到本题突然想到了这次杭电有场题很类似,那道题是并查集写的,而且给出的是每个点的权值。而本题最大的难点是修改后最多lognlognlogn求出更新后的答案,也就是每次O(n)O(n)O(n)求是不允许的自己没有想出来,但是看到正解的神奇之处也是五体投地首先我们模拟一下样例的操作过程:原创 2020-08-13 08:57:11 · 283 阅读 · 0 评论 -
2020牛客暑期多校第十场 E - Game(思维)
传送门首先一开始看到这题就很容易想到二分答案,但是遗憾的是只能向左推而不能向右推,因此我们需要的是考虑前面。然后平均是不难想到的,然后我们发现似乎需要考虑每一个单调不减的区间做平均,然后反复如此直到完成实际上如果当前列的高度较高,那么就向前缀的所有块平均高度,否则只需要累加到前缀和中,然后每次更新答案⌈sumi⌉\lceil\frac{sum}{i}\rceil⌈isum⌉。这样做的想法是平均后剩余块每次都推到第一列直到不能再推,那么假设第一列一定是当前前缀中最高的,如果当前列的块较多那么就更新了第原创 2020-08-12 11:26:05 · 131 阅读 · 0 评论 -
2020牛客暑期多校第十场 A - Permutation(思维)
传送门首先找一下规律,假设p=7p=7p=7,那么写出1−61-61−6分别乘二乘三的余数,然后找下规律:原数乘二取余乘三取余123246362415531654然后我们发现从对于这个例子来说,从任意地方出发都能找到一条或多条路径。如果仅仅考虑第一、二列和第一、三列,那么我们发现每种情况都会形成若干个环:那么就是如何破环连成一条路径的问题,我们可以任选一个数作为起点,先贪心的找乘二取余(或者乘三取余)的路径,一旦将形原创 2020-08-12 09:59:15 · 207 阅读 · 0 评论 -
2020牛客暑期多校第八场 I - Interesting Computer Game(并查集+离散化)
传送门本题的做法是万万没有想到的,我觉得三个人都没想到这方面确实是解决问题的能力亟待加强可以将每对数都连上一条边,这样本题就变成了图论的问题,那么这个图肯定是若干个连通块,对于一个含有nnn个顶点的连通块,如果恰好有n−1n-1n−1条边,那么只能选择n−1n-1n−1个点,否则一定能选择nnn个点,那么考虑使用并查集解决这个问题,实际上就是判断每个集合中是否含有环实际上本题并不是严格的并查集判断是否含有环,因为一条边如果出现了两次,那么该边连接的两个点都可以选,进而这个集合就能选出所有的点。参考了原创 2020-08-09 12:27:27 · 106 阅读 · 0 评论 -
2020牛客暑期多校第八场 K - Kabaleo Lite(贪心)
传送门因为每个人必须从第一道菜开始连续的吃,那么接待的游客只能是第一道菜的数量,如果需要保证权值和最小,那么显然我们求出所有的前缀和然后排序,这样贪心地选择即可,但是会出现一些问题,因为每次做一道菜都要消耗前缀的每种菜xxx个,因此对于某个最大的前缀和,能招待的客人是前缀中最少数量的菜决定的,然后每次做完之后,显然只能再去做该数量最少的菜的前缀(后面的菜因为该道菜已经不能做了),一开始我想的是用线段树维护区间最值和区间数目,实际上本题并不需要多么麻烦:我们只需找到每个前缀的最小值并保存到数组里,前缀和原创 2020-08-09 12:08:28 · 174 阅读 · 0 评论 -
2020牛客暑期多校第七场 H - Dividing(整除分块)
传送门这篇博客是我看到的关于这道题最详细的解释了。这道题比赛时队友找到了一种神奇的规律,大概是∑i=1k(n%i==0?2n/i:2n/i+1)\sum_{i=1}^{k}(n\%i==0?2n/i:2n/i+1)∑i=1k(n%i==0?2n/i:2n/i+1),然后也写过了,赛后发现本题的标答实际上是我们都没有想到的:因为起点是111,每次可以加上kkk也可以乘上kkk去传递,无论是加kkk还是乘kkk,最后都不改变nn%kn的值,然后发现实际上需要求的是∑i=1k∑j=1n(j%i==0&nb原创 2020-08-09 11:00:32 · 116 阅读 · 0 评论 -
2020牛客暑期多校第七场 B - Mask Allocation(思维)
传送门首先假设n<mn<mn<m,然后不难知道分的每堆口罩的最大数量不能超过nnn观察样例发现最优的分法似乎需要先分出nnn个nnn,再仔细思考一下,如果是4 84~~84 8这组数据,显然需要分为888组444,这样也满足了444组888然后得出我们在分出(m/n)∗n(m/n)*n(m/n)∗n组nnn之后,然后考虑满足有nnn组mmm个口罩,那么下面需要分的是nnn堆m%nm\%nm%n口罩,现在已经不难看出,这是一个递归的程序,递原创 2020-08-09 10:17:04 · 108 阅读 · 0 评论 -
2020牛客暑期多校第五场 I - Hard Math Problem(思维)
题目链接真的太菜了,画了两个小时也没做出来,心态崩了…注意到如果使HHH尽可能的多,那么就可以考虑使用HHH围住EEE和GGG,为了保证每个HHH周围合法,那么就让E,GE,GE,G处在所有的(主)对角线#include <bits/stdc++.h>using namespace std;int main() { ios_base::sync_with_stdio(false),cin.tie(0), cout.tie(0); // cout <<原创 2020-07-30 21:32:18 · 171 阅读 · 0 评论 -
2020牛客暑期多校第五场 E - Bogo Sort(思维/LCM)
题目链接比赛时写了Java大数但是没想到不需要取模,orz…给定数组ppp对一个nnn个数的排列做下列置换操作:void shuffle(int a[], int n) { int b[n]; for (int i = 0; i < n; i++) { b[i] = a[i] } for (int i = 0; i < n; i++) { a[i] = b[p[i]]; }}手动模拟两个例子,我们会发现实际上能原创 2020-07-30 21:13:25 · 200 阅读 · 0 评论 -
2020牛客暑期多校第五场 D - Drop Voicing(LIS)
传送门将序列想象成环状,将指针看做指向序列尾部的数,那么第二种操作实际上就是可以不断地移动指针:而第一种操作实际上就是指针逆时针相邻的第一个数和指针指向数交换位置,那么可以将一个数不断移动直到升序。例如245136245136245136,指针不断移动到333,然后移动一次111即可变成124536124536124536,然后再移动一次333即可完成因此实际上就是看某个环展开的LISLISLIS,答案就是min{n−LIS}min\{n-LIS\}min{n−LIS}#include <原创 2020-07-30 20:35:53 · 104 阅读 · 0 评论 -
2020牛客暑期多校第四场 D - Dividing Strings(思维/字符串模拟)
题目链接这个题其实挺有意思的,因为一个显然的规律是如果差超过9必须舍弃,因为一位一位地拆开结果最多是999,那么枚举长度的每个因数很容易想到,关键是第二个样例那种101991019910199,前三位和后两位是最优的,通过推理不难发现存在这样的情况拆分的长度差只能为111,且较大值一定为100...00?100...00?100...00?,最小值一定是长度少一的99...999?99...999?99...999?,那么就按这样的思路去枚举即可我自己写的代码又臭又长,debug半天找不到毛病,然后去原创 2020-07-24 16:06:31 · 257 阅读 · 0 评论 -
2020牛客暑期多校第四场 H - Harder Gcd Problem(思维/构造)
传送门大意:给出若干数,从中选出若干个不互质的整数对,问最多能选出多少对比赛时尝试过筛最小质因子最大质因子或者先考虑只有一个质因子的数之类的瞎搞,没搞出来,实际上这题的关键一步还是比较难想到的正解:首先不难知道n/2n/2n/2以内的数才有效,因为两个不互质的数最小公因数是222,那么我们考虑枚举n/2n/2n/2之内的每一个质数iii,找出范围内其所有的倍数,不难发现实际上只需要对这些倍数配对即可,但是这些倍数的个数可能是奇数也可能是偶数,如果是奇数的话,留哪一个呢?因为最小的质数是222,因此如原创 2020-07-23 20:25:17 · 142 阅读 · 0 评论 -
2020牛客暑期多校第四场 B - Basic Gcd Problem(质因数分解)
传送门仔细观察这个式子,我们发现如果每次转移到xxx的因数,会多乘一个ccc,为了使答案更大,可以通过每次消掉xxx的一个质因子,那么问题就变成了求xxx的质因数个数,如果我们对每个xxx质因数分解,时间复杂度为O(n∗n)O(n*\sqrt{n})O(n∗n),这样会超时,那么可以使用Pollard Rho质因数分解,时间复杂度O(n∗n14)O(n*n^{\frac{1}{4}})O(n∗n41)#include <bits/stdc++.h>#include <unor原创 2020-07-23 19:50:08 · 167 阅读 · 0 评论 -
2020牛客暑期多校第三场 G Operating on a Graph(并查集+启发式合并)
题目链接显然我们需要保存所有的点集,判断是否需要遍历所有的点就是看它本身是否是祖先节点。如果不是每次遍历该集合的连接点然后合并集合外的元素,合并之后既可以清空启发式合并#include <bits/stdc++.h>#include <unordered_map>using namespace std;#define fi first#define se second#define pb push_back#define ins insert#define Ve原创 2020-07-21 20:34:49 · 167 阅读 · 0 评论