![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
2021牛客多校
文章平均质量分 56
2021年牛客多校
Linda_yezi_coder
这个作者很懒,什么都没留下…
展开
-
2021牛客多校第三场 B——Black and white
题目大意给你一个 n×mn \times mn×m 的矩形,每填一个格子都有一个花费,当你把一个矩形四个角中任意三个角填上了,另外一个角自动填上,问你最小花费是多少解题思路首先我们肯定是从花费小的开始填,我们可以维护一个并查集。当一个点被填上之后,把这个点所在的行列都加入到一个并查集中。当我们要填一个点的时候,如果这个点的行列在同一个并查集中,说明这个点是可以自动被填上的。Code#include <bits/stdc++.h>#define ll long long#defin原创 2021-08-24 20:11:58 · 166 阅读 · 0 评论 -
2021牛客多校第二场 L——WeChat Walk
题目大意给定 nnn 个人之间的好友关系,每次单点增加一个人的步数,求每个人在自己好友列表保持冠军的时间解题思路分块我们将 nnn 个点分为大小点,定义 s=ms = \sqrt ms=m,对于度数大于 sss 的点我们称为大点,对于度数小于等于 sss 的点称为小点。可知,大点个数不超过 sss。对于小点的更新,我们直接暴力更新,复杂度不超过 m\sqrt mm对于大点的更新,大点所连大点我们可以直接更新,复杂度也不超过 m\sqrt mm对于大点所连大点,我们考虑开一个数组 c[i]原创 2021-08-23 18:13:06 · 123 阅读 · 0 评论 -
2021牛客多校第二场 K——Stack
题目大意有一个单调栈,你需要往里面放 nnn 个数,这些数是一个排列。你要保证,放入第 ppp 个数的时候单调栈的大小为 xxx解题思路对于没有指定大小的地方,我们可以认为此时的大小为前一个位置大小加一,即b[i]=b[i−1]+1b[i] = b[i-1] + 1b[i]=b[i−1]+1,显然,我们后面一个数不能与前一个数之差大于1,这样会导致中间缺少元素可放,最后我们倒着模拟一遍栈即可得出答案。Code#include <bits/stdc++.h>#define ll lon原创 2021-08-23 10:15:00 · 79 阅读 · 0 评论 -
2021牛客多校第二场 J——Product of GCDs
题目大意给你 nnn 个数,让你从中挑出 kkk 个数组成一个集合,设第 iii 个集合的最大公约数是 gig_igi,对于所有集合,求 ∏gi\prod g_i∏gi解题思路我们可以枚举 gig_igi,显然 gig_igi 是从 1 到最大值,,设 gig_igi 的倍数有 mmm 个数,那么我们算 gig_igi 的贡献是 CmkC_m^kCmk 吗?,其实不是,因为 gig_igi 的倍数组成的集合中,可能最大公约数是 gig_igi 的倍数,所以我们要减去这些值才是正确的。原创 2021-08-22 00:17:07 · 106 阅读 · 0 评论 -
2021牛客多校第二场 I——Penguins
题目大意给你两个 20×2020 \times 2020×20 的地图,’#’ 代表不可走,’.‘代表可走。对于第一张图,你需要从右下角走到右上角,对于第二张图你需要从左下角走到左上角。注意,你是同时操控两个小人,他们左右方向相反,上下方向相同,如果走某个方向,有一个人下一步是不可走,那么他会停在原地。问你最少需要多少步两个人都走到终点,如果步数相同,输出操作顺序字典序最小的,最短步数,操作顺序,最后把走的路径上的点标位’A’解题思路我们将第二张图反转一下,这样我们方便一点。定义操作顺序 ‘D’, ‘原创 2021-08-20 16:32:58 · 78 阅读 · 0 评论 -
2021牛客多校第二场 G——League of Legends
题目大意有 nnn 个人,每个人玩游戏的时间为 [li,ri)[l_i, r_i)[li,ri),让你把他们分成 kkk 组,使得每一组内共同游戏时间(区间交)至少为 1,每个人必须分到一个组,每个组必须至少有一个人,让你使得所有组共同游戏时间之和最大,输出所有组最大共同游戏时间解题思路DP + 单调队列优化我们将所有人按左端点排序,我们会发现有一些特别的大区间,这些区间可以完全覆盖其他区间,我们考虑这些区间,如果把它们单独拿出来,它们的贡献为区间长度,如果它们与它所包含的区间组合,不会对它包含原创 2021-08-17 19:28:50 · 279 阅读 · 0 评论 -
2021牛客多校第二场 F——Girlfriend
题目大意给你两个阿波罗尼斯球,让你求两个求的体积交Code#include <bits/stdc++.h>using namespace std;struct node{ double x, y, z;};const double PI = acos(-1.0);node a, b, c, d;double k1, k2;int main(){ int t; cin >> t; while(t--){ cin >> a.x >>原创 2021-08-16 23:40:06 · 112 阅读 · 0 评论 -
2021牛客多校第二场 D——Er Ba Game
题目大意给你两对数,比较按照规则比较大小解题思路按照规则模拟Code#include <bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--){ int a1, b1, a2, b2; scanf("%d%d%d%d",&a1, &b1, &a2, &b2); if(a原创 2021-08-14 14:24:34 · 79 阅读 · 0 评论 -
2021牛客多校第二场 C——Draw Grids
题目大意有一个 n∗mn * mn∗m 的点阵,每次可以连两个相邻的点,不能连连成一个封闭图形,谁不能连谁就输了。题解猜的Code#include <bits/stdc++.h>#define ll long long#define qc ios::sync_with_stdio(false); cin.tie(0);cout.tie(0)#define fi first#define se second#define PII pair<int, int>#de原创 2021-08-13 20:56:41 · 98 阅读 · 0 评论 -
2021牛客多校第二场 B——Cannon
题目大意像走象棋,棋盘有两行,很多列,第一列上有 nnn 个炮, 第二列上有 mmm 个炮,炮的规则就和象棋一样,可以隔一个打一个。现在有两种规则,对于每一种规则你需要回答一个数。规则一:你可以任意地下象棋,定义 fif_ifi 表示你下 iii 步之后可能形成的局面求 f0 xor f1 xor … xorfn+m−4f_0 \ xor \ f_1 \ xor \ … \ xor f_{n+m-4}f0 xor f1&n原创 2021-08-13 16:24:39 · 92 阅读 · 0 评论 -
2021牛客多校第二场 A——Arithmetic Progression
题目大意给你一个长度为 nnn 的数列 aaa ,数列中每个元素都不一样,问你存在多少个区间,这些区间内的数排序后是一个等差数列解题思路对于一个区间,如果这个区间内的数排序后的元素可以构成一个等差序列,那么一定满足下列性质max−min=(r−l)×gcdmax - min = (r - l) \times gcdmax−min=(r−l)×gcd其中 gcdgcdgcd 是区间差分绝对值的最大公约数minminmin 是区间的最小值maxmaxmax 是区间的最大值我们做这题的思想是,枚举原创 2021-08-12 00:17:58 · 301 阅读 · 0 评论 -
2021牛客多校第一场 K——Knowledge Test about Match
题目大意给你一个长度为 nnn 的数列 bbb ,让你把这 nnn 个数重新排列,使得 ∑sqrt(abs(bi−i))\sum sqrt(abs(b_i - i))∑sqrt(abs(bi−i)) 最小,允许你的答案与最优答案相差不超过 4%4\%4%解题思路没啥思路乱搞一下,看不太懂Code#include <bits/stdc++.h>#define ll long long#define qc ios::sync_with_stdio(false); cin.tie(0原创 2021-08-10 21:37:15 · 103 阅读 · 0 评论 -
2021牛客多校第一场 J——Journey among Railway Stations
题目大意有 nnn 个车站,每个车站开放时间为 [ui,vi][u_i, v_i][ui,vi],车辆经过第 iii 个车站到第 i+1i+1i+1个车站的时间为 cost[i]cost[i]cost[i],如果提前到达一个车站可以等待,如果到达第 iii 个车站的世界超过 viv_ivi 则不能在这个车站停车,有 qqq 次操作0 l r:0 \ l\ r:0 l r:能否从 lll 车站出发经停每个车站最后到达 rrr 车站,可以输出 YesYesYe原创 2021-08-10 21:09:48 · 247 阅读 · 2 评论 -
2021牛客多校第一场 I——Increasing Subsequence
题目大意给你一个 nnn 个数的排列 PPP两个人轮流在其中取数,按照以下规则1、每个人取的数的下标大于之前自己所取数的下标2、每个人取的数要大于之前两个人所取的数问两个人所取数的个数的期望解题思路期望DP定义 dp[i]dp[i]dp[i] 表示当前在位置 iii 还需要 dp[i]dp[i]dp[i] 的代价到达终点dp[i]=vi+∑ci∗dp[j]dp[i] = v_i + \sum c_i * dp[j]dp[i]=vi+∑ci∗dp[j]答案是 dp[0]dp[0]dp[原创 2021-08-09 20:47:08 · 162 阅读 · 0 评论 -
2021牛客多校第一场 H——Hash Function
题目大意给你 nnn 个数,找出一个数 xxx(可以不在这些数之中),让这 nnn 个数对 xxx 取模互不相等解题思路首先,很容易发现答案一定在 [n,max(ai)i∈[1,n]+1][n, max(a_i) i \in [1, n] + 1][n,max(ai)i∈[1,n]+1] 之中然后我们可以得出一个结论,任意两个数之差的绝对值一定不是答案,且任意两数之差的绝对值的因子也一定不是答案首先我们可以用FFT处理出任意两数之差的绝对值,可以参考这篇博客如何求出任意两数之和,我们给数变为一个原创 2021-08-08 21:13:40 · 109 阅读 · 0 评论 -
2021牛客多校第一场 F——Find 3-friendly Integers
题目大意定义一个“3友好数”,把一个十进制数的任意连续子串之和模3等于0,则这个数是一个“3友好数”,每次问你 [l,r][l, r][l,r]区间内有多少个“3友好数”解题思路思路1主要有两种思路,第一种是数位DP,我们记录从前面的数位到目前为止,各数位之和是否出现过模3等于0,1,2的情况Code1#include <bits/stdc++.h>#define ll long long#define qc ios::sync_with_stdio(false); cin.ti原创 2021-08-07 22:50:19 · 99 阅读 · 0 评论 -
2021牛客多校第一场 E——Escape along Water Pipe
题目大意给你一个这样的图,你可以旋转每一块,从起点到终点(玩过赛尔号的都懂)解题思路模拟 BFSBFSBFS,记录一下进入的方向和坐标即可typetypetype 数组从上进入是0,从左是1,从下2,从右3.这个 typetypetype 数组是用来计算转动角度的,比如type[0][2]type[0][2]type[0][2]意思是上一个格子从上进入,这一个格子从下进入。你会发现4∗44*44∗4种情况每一种情况都和一种管子一一对应(这里面的“-1”是不合法情况),然后type[0][1]t原创 2021-08-05 21:43:11 · 157 阅读 · 1 评论 -
2021牛客多校第一场 C——Cut the Tree
题目大意给你一棵树,每个点都有一个权值,让你在所有点中选择一个点删除,使得剩下的子树的最长上升子序列长度最小解题思路首先如何求树上最长上升子序列参考博客如何删点首先,我们任取一个点 ppp 考虑删除点 ppp 的结果,删除点 ppp 之后,我们只需要考虑 ppp 的子树的最长上升子序列长度,即为答案,同时我们记录一下是哪一棵子树的最长上升子序列最长,我们如果要删其他点的话,那要删去的点一定在这棵子树之中(因为你再删除了这棵子树上的点的其他点是没有意义的,并不会对答案造成贡献)。然后,如何选取原创 2021-08-05 10:34:56 · 312 阅读 · 0 评论 -
2021牛客多校第一场 D——Determine the Photo Position
D——Determine the Photo Position题目大意给你一个nn的矩阵,0表示这个位置没有人,1表示这个位置有人,问你把一个1m的矩阵安排在没有人的位置上有多少种安排方法解题思路遍历每一行,找连续的0,连续0的个数为num,每一块连续的0对答案的贡献是max(0,num−m+1)max(0, num-m + 1)max(0,num−m+1)Code#include <bits/stdc++.h>#define ll long longusing namespac原创 2021-07-30 20:44:40 · 97 阅读 · 0 评论 -
2021牛客多校第一场 B——Ball Dropping
B Ball Dropping题目大意有一个倒置梯形漏斗,问你一个半径为R的球是否能掉下去(签到题)解法随便推一下公式就行标题#include <bits/stdc++.h>#define ll long longusing namespace std;const int MAXN = 2e5 + 7;int main(){ int r, a, b, h; cin >> r >> a >> b >> h; if(2*r原创 2021-07-30 20:38:14 · 109 阅读 · 0 评论 -
2021牛客多校第一场 A——Alice and Bob
A Alice and Bob 博弈论题目大意有两堆石子,每次可以从一堆中取走iii个从另一堆中取走kikiki个,i>0,k>=0i>0, k>=0i>0,k>=0,两个人轮流取,谁不能取谁就输了解法打表找出所有必败态,我们知道必败态的前一个状态一定是必胜态,我们把所有必败态的前一个状态都标位1,sg[i][j]sg[i][j]sg[i][j]表示第一堆石子还剩 iii 个第二堆石子还剩 jjj 个时先手所面临的状态,1必胜态,0是必败态Code#inclu原创 2021-07-30 20:35:44 · 335 阅读 · 0 评论