随笔分类 -  《牛客比赛题解》

摘要:A:百度永远滴神 // Author: levil #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; const int N = 2e5+5; const int 阅读全文
posted @ 2020-08-26 09:38 levill 阅读(217) 评论(0) 推荐(0)
摘要:A:开局就开了这题,一直以为一开始想的有问题。 其实并没有错。对于起点和终点,肯定是某个终点和起点的这段距离只需要走一次。 其中重叠也应该看成不同的路线。(仔细想想就明白了) 那么,就是找和每个点最远的点了。 这里就用到了树的直径。 根据树的直径的性质,距离每个点最远的点肯定是直径中的一点。(可以画 阅读全文
posted @ 2020-08-25 11:35 levill 阅读(165) 评论(0) 推荐(0)
摘要:A:其实并不是特别难的一个题,想的太复杂了。 首先,我们把关系看成能够传递的,那么我们并查集统计连通块之后。 可以发现,对于一个连通块,最优方案肯定只有1个人会没朋友。 因为一直把和当前删的点有关系的人的人删进去,最后肯定就能删完全部点,并且保证只有第一个进去的人没朋友。 因为要保证字典序最小,我们 阅读全文
posted @ 2020-08-17 13:45 levill 阅读(232) 评论(0) 推荐(0)
摘要:A:因为数太大,所以按字符串存即可 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef long double ld; typedef pair<LL,int> pii; const int N = 1 阅读全文
posted @ 2020-08-15 15:28 levill 阅读(176) 评论(0) 推荐(0)
摘要:A: #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef long double ld; typedef pair<int,int> pii; const int N = 205; const int 阅读全文
posted @ 2020-08-09 13:48 levill 阅读(181) 评论(0) 推荐(0)
摘要:E: 首先看到公共前后缀。 可以想到kmp的next数组就是求得最长公共前后缀。 那么假定的最长公共前后缀就是next[len]. 如果这个串中有和它一样长的。那就说明这个最长公共前后缀在字符串中间出现过。 怎么判断?用next数组,当next数组合next[len]时,说明就是最长公共前后缀。 为 阅读全文
posted @ 2020-07-08 08:51 levill 阅读(131) 评论(0) 推荐(0)
摘要:最大的gcd就是相邻的差距的gcd. 证明: 令p = 差距的gcd. 令a[1] = m*gcd. 那么 a[2] = m*gcd+k1*gcd. a[3] = m*gcd+k2*gcd. 可以发现对于 a[2] = k1+a[1], a[3] = (k1+k2)*a[1], a[4] = (k1 阅读全文
posted @ 2020-06-27 07:45 levill 阅读(110) 评论(0) 推荐(0)
摘要:B: 二分图的染色应用。 首先,注意题目的信息。 每个人最多有三个认识的人。 那么,我们可以思考,当有三个人和一个人连边时。 如果有两个人和他同色,一个人不同色。 那么将这个人反转,就变成了,一个人和他同色,两个人不同色。 那么可以发现,对于每一个人,翻转后可以减少同色的数量。 可以证明,必定存在解 阅读全文
posted @ 2020-06-17 08:32 levill 阅读(200) 评论(0) 推荐(0)
摘要:可以发现,对于从右开始的操作。 可以看成从左边某个点开始不断向右加b的操作。 那么显然可以发现左边开始的点为n%b+1. 那么我们找到a,b第一次遇到的情况。这时是第一个左右手都有糖的人。 那么我们又可以发现,从这点开始,他们俩下次遇到的情况,显然是+lcm(a,b). 即从这点开始每隔lcm(a, 阅读全文
posted @ 2020-06-15 14:08 levill 阅读(203) 评论(0) 推荐(0)
摘要:A: 数位dp。dp[i]表示从小到大第i位时的贡献。可以发现。当第i位为7时。它的贡献即为(i+1~n)*10.即70.71,72,73,74,75,76,77,78,79.对于每一位都有10个数。0~10有10个.0~100有100个.所以可以预处理出这个数。显然可以发现,当该位没有到达上界时, 阅读全文
posted @ 2020-06-14 09:07 levill 阅读(349) 评论(0) 推荐(0)
摘要:C: 显然步数只存在0,1,2,3,-1的情况。随便画画就能明白.对于0的情况,显然是(0,0).对于1的情况,显然为该点在(0,0)和某点的连线上。这里可以用斜率来判断。 还有就是如果斜率的个数 <= 1,说明无法完成,这里需要在下面的情况之前特判。对于2的情况。当n > 3时。都可以2步。 对于 阅读全文
posted @ 2020-06-13 23:13 levill 阅读(200) 评论(0) 推荐(0)
摘要:D: 思路:模拟. 因为n的数量比较小。所以可以去模拟这个操作. 每次给最小的加上n-1,其他的减去1.当a[1] < 0时说明不合法. 当a[1] = a[n]时说明可以实现。 因为a[n]的值在[0,1000],所以很明显这个模拟次数最多1000次. 当1000次还没退出时说明在这之前肯定出现过 阅读全文
posted @ 2020-06-08 17:07 levill 阅读(347) 评论(0) 推荐(1)
摘要:题意:对于题意可以分解为. 有n个点,由n-1条白色的边连接,同时又有着m条边. 因为这里说到了白色的边都不重复也不缠绕,显然是n-1条边构成树边. 然后有m条非树边。然后问我们删去一条树边和一条非树边使树分为两部分。这条边完全断开. 思路: 我们可以从每条树边出发。 对于每条树边。 如果没有非树边 阅读全文
posted @ 2020-06-07 19:57 levill 阅读(108) 评论(0) 推荐(0)