目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网NOIP赛前集训营-普及组(第二场) 题目链接:https://www.nowcoder.com/acm/contest/165#question A 你好诶加币 设最大值为maxx,最小值为minn 分三种情况: \(1.a > 0 且b > 0\) 会加爆long long,所以化简式子 \(m…
链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中  表示序列的平均值. 可以证明的是,如果序列元素均为整数,那么方差乘以 m^2 之后,得到的值一定是整数. 现在有一个长度为 N 的序列 a[1...N],对每个 i = 1~N,你需要计算,如果我们删除 a[i],剩下的 N-1 个元素的方差乘以 (N-1)^2 的值. 输入描述: 第一行一个整数 N.接下来一…
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi)代表.表示对于所有在xi到yi的最短路径上的城市,军队i都会守卫他们. 现在有q个重要人物.对于一个重要人物j,他要从他的辖区vj出发,去到首都.出于某些原因,他希望找到一个离首都最近的…
牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l,r]表示,代表A[l], A[l + 1], ..., A[r]这段数.对于一个序列B[1], B[2], ..., B[k],定义B的中位数如下: 1. 先对B排序.得到新的序列C. 2. 假如k是奇数,那么中位数为.假如k为偶数,中位数为. 对于A的所有的子区间,小N可以知道它们对应的中位数.…
第一场打的很惨淡啊 t1二分+前缀最小值没想出来,20分的暴力也挂了,只有10分 t2数位dp,调了半天,结果因为忘了判0的特殊情况WA了一个点,亏死 t3emmmm.. 不会 imone说是DSU on tree的裸题 然后打了半个小时,A了qwq 题解回头再补…
数数字 思路: 数位dp 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long #define mp make_pair #define pb push_…
中位数 思路: 二分答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long #define mp make_pair #define pb push_…
[题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小生成树上哪些边需要经过两次.我们发现如果某个点当前的度为奇数,这个点到它的父亲的边要经过两次,所以我们在它和它父亲之间多连上一条边(即把他们的度都加1). 这样一次dfs我们就可以从下往上确定出需要经过两次的边. #include<cstdio> #include<cstring> #…
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个数. 思路: 暴力,注意特判\(0\)和\(1\)的情况. 源代码: #include<cstdio> #include<cctype> typedef unsigned long long uint64; inline uint64 getint() { register char…
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 \(a_i\) 恰好等于 \(a_l, a_{l+1} \ \ \dots \ \ a_{r-1}, a_r\) 的最大公因数. 求最长的好的区间的长度. 输入描述: 第一行 n,表示序列的长度: 第二行 n 个数 a1,a2,...,an. 输出描述: 输出一行一个数,表示最长的好的区间的长度.…
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ..., ar-1, ar 的最大公因数. 求最长的好的区间的长度. • 注意到:如果…
链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l,r]表示,代表A[l], A[l + 1], ..., A[r]这段数.对于一个序列B[1], B[2], ..., B[k],定…
染色 链接:https://ac.nowcoder.com/acm/contest/176/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 fizzydavid和leo有n个方格排成一排,每个方格初始是白色.fizzydavid有红色染料,leo有蓝色染料.他们共进行了m次操作,在每次操作中,fizzydavid或者leo会选择若干个(可以是零个)连续相邻的方格并用自己…
中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一天,牛牛找到了一个叫<中国式家长>的游戏,游戏中需要靠"挖脑洞"来提升悟性. 挖脑洞在一个N行M列的地图上进行,一开始牛牛有K点行动力和0点悟性,地图上有两种格子: 1.悟性格: 挖悟性格需要减少…
链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号) 每按一次退格键-,会删掉字符串的最后一个字符, 特别的,如果字符串为空,牛牛也可以按退格,但是什么都不会发生. 合法括号序列的定义和上一场比赛中的C题是一样的 https://w…
A 拓扑排序+倍增哈希 或者 拓扑排序对于每个点计一个rank,每个点优先选取rank靠前的最小边权点 每次依然按照rank排序更新rank #include<bits/stdc++.h> using namespace std; template <typename T> void chmax(T &x,const T &y) { if(x<y)x=y; } template <typename T> void chmin(T &x,co…
洞穴 思路: 矩阵乘法 由于只需要知道 A ^ l 的 第a行第b个元素 所以我们每次在做矩阵乘法时只需要算第a行就可以了 还要像矩阵快速幂一样预处理A ^ (1<<d) 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #…
题意 有 \(n\) 个箱子,指定一个箱子开始向右推,如果碰到了别的箱子会令其移动,问 \(k\) 秒之后每个箱子所在的位置. \(n\leq 10^5\). 分析 转化成最短路模型,如果两个箱子 \(a,b\) 在 \(y\) 轴方向上投影有交,连边 \(a \rightarrow b\),边长为 \(x_{1b}-x_{2a}\). 考虑优化建图,发现如果三个箱子 \(a,b,c\) 投影两两有交,\(a\) 和 \(c\) 之间不用连边. 所以如果两个箱子 \(a,b\) 之间需要连边,当…
题意 题目链接 分析 直接背包之后可以 \(O(n)\) 去除一个物品的影响. 注意特判 \([p==1]\) 的情况. 总时间复杂度为 \(O(n^2)\) . 代码 #include<bits/stdc++.h> using namespace std; #define go(u) for(int i=head[u],v=e[i].to;i;i=e[i].last,v=e[i].to) #define rep(i,a,b) for(int i=a;i<=b;++i) #define…
题意 给定一个 \(n\) 点 \(m\) 边的边权非负的有向图,边有字符,求以每个点为开头的最长路字典序最小的路径 \(hash\) 值. \(n,m\leq 10^6\) 分析 首先建反图拓扑排序后入度不为0的点的答案为 \(inf\) . 在 \(dep\) 相同时,怎么比较两种转移的优劣?注意到建完反图之后可以通过判定两个转移第一个字典序不同的位置的大小,可以倍增\(+hash\) 实现. 总时间复杂度为 \(O(20*(n+m))\). 代码 #include<bits/stdc++.…
https://www.nowcoder.com/acm/contest/174/A 这个的话  一个位置被清理的时间就是它到空白格子/边界的最短路对吧qww 然后求期望的话 假设它在第i步被清理掉的概率是ai,那求的就是i*ai对i求和 然后令Si表示至少在第i步被清理 那么$Si=ai+a{i+1}+...+ap$这样其中p是这个格子到边界的距离(因为最多就p步就清理了 求的就是$$sum i*ai = sum i*(Si-S{i+1}) = sum Si$$ 所以只需要求出所有S之后加起来…
链接 A.中国式家长2 模拟题,毫无坑点 #include<bits/stdc++.h> #define REP(i,a,b) for(int i(a);i<=(b);++i) #define dbg(...) fprintf(stderr,__VA_ARGS__) using namespace std; typedef long long ll; typedef unsigned int uint; typedef unsigned long long ull; typedef pa…
A.最长路 题意:给定有向图,每条边有个字符\([0,10^9]\),求每个点最长路字典序最小的方案.\(N,M\le 10^6\) 建反图跑拓扑排序,显然入过队的点都有最长路,考虑如何判断字典序大小,一种方案是把每个点转移过来的路径字符串哈希一下,然后用倍增比较两个字符串的大小复杂度\(O(N+Mlog_2M)\) 第二种方案是每次对最长路相同的点以入边上的字符为第一关键字,起点的排名(之前已经排过了)为第二关键字排序,这样可以保证字典序小的先更新 代码是第一种方法 #include<bits…
题目描述 牛牛在纸上画了\(N\)个点(从\(1\)到\(N\)编号),每个点的颜色用一个整数描述. 牛牛决定用这\(N\)个点随机生成一棵树,生成的规则如下: \(1\)号点是根节点 对于\(2\)号点到\(N\)号点,每个点随机指定一个父亲.\(i\)号点(\(2 \leq i \leq N)\)的父亲在i的约数中随机挑选一个.(例如\(10\)号点的父亲可以是\(1\)号,\(2\)号,\(5\)号,\(7\)号点的父亲只能是\(1\)号点)树生成完之后,牛牛可以计算出这个树有多少个联通块…
题目描述 有一天,牛牛找到了一个叫<中国式家长>的游戏,游戏中需要靠"挖脑洞"来提升悟性. 挖脑洞在一个\(N\)行\(M\)列的地图上进行,一开始牛牛有\(K\)点行动力和\(0\)点悟性,地图上有两种格子: 1.悟性格: 挖悟性格需要减少10点行动力,如果行动力不到10点则无法挖取,挖取成功后悟性会提升\(10\)点 2.行动格: 挖取行动格没有行动力要求,挖取完之后行动力会增加一定点数,但行动力不能超过\(K\)(比如\(K = 150\), 当前有\(140\)点行…
题目描述 有一棵有 n 个结点的树,每条边有编号为 0,1,2 的三种颜色,刚开始每条边颜色都为 0 . 现在有 3 种操作: \(1\ x\ y\ col\) ,表示询问 \(x\) 到 \(y\) 的最短路径上有几条颜色为 \(col\) 的边: \(2\ x\ y\ col_1\ col_2\) ,表示将两个端点都在 \(x\) 到 y 的最短路径上的边的颜色修改为 \(col_1\) ,将恰好有一个端点在 x 到 y 的最短路径上的边的颜色修改为 \(col_2\) : \(3\ rt\…
题目描述 有一道选择题,有 a,b,c,d 四个选项. 现在有 n 个人来做这题,第 i 个人有 pi,j 的概率选第 j 个选项. 定义\(cnt(x)\)为选第$ x $个选项的人数. 令\(mx\)为\(cnt(x)\)最大的\(x\)(如果有多个\(cnt(x)\)最大的$ x$,则取其中 \(x\) 最小的),若 ,则所有人得 \(0\) 分:否则令 choicei 表示第$ i $个人选的选项,则第 i 人得 分. 求每个人的期望得分. 输入描述: 第一行一个整数 n ,表示人数.…
题目描述 有一张 n 个点 m 条边的有向图,每条边上都带有一个字符,字符用一个数字表示. 求以每个点为起点的最长路,输出走过的边的字符构成的字符串的字典序最小的方案. 为了方便,你需要这样输出方案: 如果最长路无限长,则输出Infinity 否则假设方案走过的边的字符依次为 w1,w2,..wk ,输出 输入描述: 第一行两个整数 n,m ,表示有向图的结点个数和边数. 接下来 m 行,每行三个整数 x,y,w ,表示有一条从 x 连向 y 的边,上面有字符 w . 输出描述: 对于每个询问,…
啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下\(\color{#FF6161}{风浔凌}\)巨佬\(qwq\)...\(320\)真是太强了\(\%\%\%\)... \(A\) 你好诶加币 题目描述:就是简单的\(a+b\)啊(逃) 题目本质:数据范围是\(long\ long\)的\(a+b\)啊(逃) 思路:显然不可能直接算啊...所以…
括号 思路: dp 状态:dp[i][j]表示到i位置为止未匹配的 '(' 个数为j的方案数 状态转移: 如果s[i] == '(' dp[i][j] = dp[i-1][j] + dp[i-1][j-1] 如果s[i] == ')' dp[i][j] = dp[i-1][j] + dp[i-1][j+1] 优化:用滚动数组优化掉i这一维度 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #i…