摘要:
B 题意: 给定一个01字符串,你需要找到最长的一个子串和最长的一个子序列,分别使得其中01的个数相同。 做法: 子序列很好算 2×min(cnt0,cnt1) 子串可以考虑前缀和 将0与1的个数差前缀和 每次询问当前的前缀和x 如果之前出现前缀和为y 使得x+y=0即成立 最后取个最大值就好 vo 阅读全文
摘要:
A PENTA KILL! **题意:**给定一个击杀序列 判断是否有一个人连续击杀五个不同的人 分析: 开始很容易走到一个误区 出现连续相同的就舍去从零开始计数 但是比如 A C B C A D 遇到两个C 舍去从零开始 但是实际上 可以是后面四个组成 数据允许n方 所以枚举每个五杀开头 判断能否 阅读全文
摘要:
A 01 Sequence 题意: 给定一个01字符串,一次删除操作可以选择一个1并删除两个相邻的点,或者将一个数01翻转。求最少的翻转操作使得一段区间被 删完,该区间的长度一定为3的倍数。每一段区间左右两点连接成环。 分析: 中间部分利用前缀和计算 两边部分合并起来 相当于一段连续的1 void 阅读全文
摘要:
E An Interesting Sequence 题意: 请构造一个总和最小,长度为n且首项为k,并且相邻两项的gcd = 1的数组,输出数组各项之和。 分析: 显然对于n的奇数和偶数我们要进行分类讨论,我们希望数组的和更小,并且gcd = 1,那么我们只需要在数组中添加2和3即可。 不管什么情况 阅读全文
摘要:
1002 Dragon slayer 题目大意: 给出一张的网格地图,给出起点和终点(均为方格的正中心),其中地图中有面墙阻隔了道路,每面墙都在网格线上并保证墙横平竖直,以线段端点的形式给, 问从起点到终点最少要破坏多少面墙 分析: 发现数据都是<=15 所以直接枚举破坏墙的方案 对每一种二进制方案 阅读全文
摘要:
1003 C Slipper **题意:**给定一颗树,起点和终点,树上路径有变权。存在一种特殊的路径当且仅当深度为x的节点可以花费p点代价到深度为x+k或者x-k的节点上,求最短距离 分析: 单源最短路 关键在于建图 想到给每个深度建点 如果每层建立一个点 相差k层的点就能到达 但是此时有个问题 阅读全文
摘要:
1006 F Maex 题意: 给定一颗树,树上的每个节点有一个权值,权值互不相等。定义mex(i)为以 i 为根的子树上最小的没出现的正整数。对每一个节点的权值进行构造 ,求整颗树的所有节点的mex的最大值。 分析: void dfs(int u, int fa) { siz[u] = 1; in 阅读全文
摘要:
这场难度有点大 可改的题没几个 B. Independent Feedback Vertex Set 题意: 有1-n个点,每个点有权值。初始三个点的互相连接。接下来从第4个点开始,每次给出两个点,保证这两个点之间已经存在边,并与这两个边进行连接。你需 要从这些点中挑出一些点,使得这些点之间不直接相 阅读全文
摘要:
A. Theramore 题意: 给定一个01串,可以选择一个奇数长度的区间,使得该区间翻转,求任意次数操作后的最小字典序。 分析: 我们发现不管怎么转,奇数位置上的数永远在奇数上,偶数永远还在偶数上,但是我们可以通过翻转随意的去更换位置,因此我们只需要统计处奇偶上01的位 置,然后把1尽可能的往后 阅读全文
摘要:
圣遗物 分析: 发现除了第一个位置以外 每个位置都有两种选择 #include <bits/stdc++.h> using namespace std; const int mod = 998244353; int n, fac = 1; int Pow (int a, int k) { int r 阅读全文
摘要:
J. Sum Plus Product 题意: 给定一个长度为n的数组,每次随机拿出两个数使其变成 (a + b + a * b)再放回数组,最终数组中只剩下一个数,求剩余数字的期望是多少。 分析: 模拟一下就会发现 合并的顺序并不重要 比如 a1 a2 a3 和 a3 a1 a2 两者最后答案都是 阅读全文
摘要:
G. Even Tree Split 题意: 给定一个节点数为偶数的树,请问有多少种方案使得切割开一条边使得剩余连通块的大小都是偶数。 分析: 我们发现断开一条边是独立的,因为如果两个连通块分开后都是偶数再断开仍然是偶数。因此我们只需要找到有多少个满足要求的边,再统计这个边选与不选即可。 如何判断该 阅读全文
摘要:
1004 Link with Equilateral Triangle 题意:给一个边长为n的大等边三角形,含有n2个边长为1的小等边三角形,在每个小等边三角形的顶点上填数字(0或1或2),大等边三角形的左侧不能填0,右侧不能填1,底部不能填2,且每个小三角形三个顶点上的数加起来不能是3的倍数。 找 阅读全文
摘要:
B 1002 Boss Rush 题意:你有 n 个技能,这种技能是一种灼烧技能,在len[i]秒的时间内,每秒造成d[i][j] 的伤害(j -> [1, len[i]])。每个技能有t[i]的冷却时间,在冷却时间内不能放其他技能,每个技能只能释放一次,但是会继续灼伤怪物。怪物的血量为m,请问最少 阅读全文
摘要:
https://codeforces.com/problemset/problem/739/A 题意: 你有 m 个区间,要求构造一个长度为 n 的序列使得这 m 个区间中 mex 最小的最大。 int main(){ ans=n=read(),m=read(); for(int i=1;i<=m; 阅读全文
摘要:
A 多 首先题意要理解清楚 操作是按照顺序来的 直接dp即可 dp[i]表示当前将坏电脑停在i位置最少不执行的条数 设(u,v) 设A=dis[u],B=dis[v] 转移: dis[u]=min(A+1,B)使得坏电脑要保存在当前位置该条操作应该不执行 同理 dis[v]=min(A,B+1) 为 阅读全文
摘要:
F Shannon Switching Game? 分析: 因为是cutplayer 先手 !!!! 所以考虑与t 相连的点能到达t 该满足什么条件 显然应保证至少有两条边连向t 在考虑对于任意点u ,该如何保证到达能够到达t 的点,显然要保证至少有两条边连向能够到达t 的点 按时此思路跑一遍B F 阅读全文
摘要:
已知n+ 1个正整数,它们全都小于或等于2n,证明当中一定有两个数是互质的 取n个盒子,在第一个盒子我们放1和2,在第二个盒子我们放3和4,第三个盒子是放5和6,依此类推直到第n个盒子放2n-1和2n这两个数。 如果我们在n个盒子里随意抽出n+1个数。我们马上看到一定有一个盒子是被抽空的。 因此在这 阅读全文
摘要:
M Maimai DX 2077 模拟题 #include<cstdio> int v[6][6]={{10,10,8,5,0},{20,20,16,10,0},{30,30,24,15,0}, {50,50,25,20,0},{10,5,4,3,0}},a[6],A,B,A0,B0; int ma 阅读全文
摘要:
A Don't Starve 巧妙在于拓扑排序 为啥要开滚动数组 因为对于长度相同的边 我们只能选择一条 而这些边属于同一个状态的 为了防止更新的时候对同状态的点造成影响 #include<bits/stdc++.h> using namespace std; int i,j,k,l,n,m,f[2 阅读全文
摘要:
A Car Show 题意: 给定一个数组,请找到有多个区间 [L,R] 满足 1 到 m 的数都出现过。 分析:直接双指针就好 #include<bits/stdc++.h> using namespace std; long long n,m,s[100100],v[100100],cnt,an 阅读全文
摘要:
这篇博客写的非常清晰 https://zhuanlan.zhihu.com/p/549242325 给定一个字符串,问有多少个以 k,f,c 结尾的回文子串。 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) 阅读全文
摘要:
C Constructive Problems Never Die 题意: 给你一个数组 A ,你需要构造一个排列 P ,使得P[i]≠A[i] 分析: 考虑构造不出来的情况 如果所有A[i]都相同一定不成立 先构造P[i]=i 如果P[i]=A[i] 就遍历一遍整个数组 找到一个P[j] 使得P[ 阅读全文
摘要:
G Icon Design 就是一个暴力判断的题 #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; for(int i = 0; i < 4*n+5; i++){ for(int j=0; j < 13*n 阅读全文
摘要:
莫队也算是一个优雅的暴力吧 复杂度n×sqrt(n) 主要解决离线多个区间问题 注意点分块(i-1)/block+1 排序按照区间左端点作为第一顺序 如果左端点在一个块里 则右端点作为第二顺序 加减操作注意是先++还是后++ 初始L=1,R=0 https://www.luogu.com.cn/pr 阅读全文
摘要:
取石子 给出四堆石子,石子数分别为a,b,c,d。规定每次只能从堆顶取走石子,问取走所有石子的方案数。 分析:考虑取出石子的序列长度为a+b+c+d,属于第1堆,第2堆,第3堆,第4堆的分别有a b c d 个 此 答 案 为 C(a+b+c+d,a) C(b+c+d,b) C(c+d,c)=(a+ 阅读全文
摘要:
字典序最大的子序列 题意:给定字符串S,求出字典序最小的子序列 很明显就是从前往后选, 每次选后缀最大的一个字符,这样一定最优 #include<stdio.h> char s[1000000]; int main() { scanf("%s",s); int i,j=0,k,last=0; for 阅读全文
摘要:
没啥说的 签到题 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=4005; int k; int n,m,q,sum; string 阅读全文
摘要:
https://ac.nowcoder.com/acm/contest/9033/D 分析:这种类型的题目做法很固定 首先离线 设当前点为i 若以i为右端点 则合法的左端点一定是连续的一段 设为[l,r] 这个可以预处理出来 预处理的时候要注意 不能只考虑i的颜色 一定要和之前的颜色取max 询问的 阅读全文
摘要:
https://www.luogu.com.cn/problem/P2163 很容易想到二维前缀和 但是因为数据范围是不允许的 就和之前校赛的题目一模一样 做这个题目前先看一下这个题目 只要将查询的点分为四个点 放入扫描数组中 再从小到大扫描一遍即可 #include<bits/stdc++.h> 阅读全文
摘要:
这一场题目出的很好 A题: Task Computing 如果我们已经选了一些物品,其权值为 x,现在我们需要往前面添加一个(w,p) 的物品。 那么我们的权值会变成 w+p · X 这种做法很像模拟经营的 前面选的会对后面产生影响 #include<bits/stdc++.h> using nam 阅读全文
摘要:
是我太菜了 加上补提也才三个题 A Ancestor 题目主要是让我们求长度为k-1的点集的最近公共祖先(一个点被删了) 方法一用到结论 我们只用取这些点中dfs序最小和最大的两个点来求最近公共祖先就行。 方法二可以维护一个前缀和后缀lca数组 每次删除该点 相当于是求lca(pre[i-1],su 阅读全文
摘要:
链接:https://ac.nowcoder.com/acm/problem/13611 题目描述 shy有一颗树,树有n个结点。有k种不同颜色的染料给树染色。一个染色方案是合法的,当且仅当对于所有相同颜色的点对(x,y),x到y的路径上的所有点的颜色都要与x和y相同。请统计方案数。 dfs序:每个 阅读全文
摘要:
J题 Link with Arithmetic Progression 以上相当于最小二乘法的推导过程 要求具体的值话 还是要用到高中大题里面的公式 这个题得出来 其实等差数列就是一个线性函数上的点 #include <stdio.h> const int N=1e5+7; int s[N]; in 阅读全文
摘要:
NC19788 Travel 题意为:将n个节点的树分成m个连通块,并对每个连通块标号的方案数。 思路:初看这道题像树形dp,但一想转移方程和数据范围,感觉不可解。 换成组合数学的角度,将分成m个连通块转化为删去m-1条边,显然删去m-1条边的方案与分成m个连通块的方案是一一对应的,再将连通块标号, 阅读全文
摘要:
**逆序dp** P1280 尼克的任务 链接:https://www.luogu.com.cn/problem/P1280 ![](https://cdn.luogu.com.cn/upload/image_hosting/z67j0kfb.png) 本题的关键在于顺推不好做 想着要倒推 想着要统 阅读全文
摘要:
首先不得不说 题出的质量很高 Villages: Landlines 真的吐槽题目描述真的太冗长了 英文读起来很麻烦 其实就是让你把所有圆都连接起来 求空缺部分的长度 直接排个序然后线性扫一遍就好 #include<bits/stdc++.h> using namespace std; #defin 阅读全文
摘要:
链接:https://ac.nowcoder.com/acm/contest/32708/B 必须得感叹一下这个题真的牛 分析:发现n很小 所以能覆盖完的情况是能枚举出来的 第一个问题就来了 怎么判断状态s能否将整个区域覆盖完全 不难想到求出覆盖面积 合并面积不好算 交面积好算 所以用到容斥原理 面 阅读全文
摘要:
链接:https://ac.nowcoder.com/acm/contest/32708/F 这个结论非常重要!!! 实际操作方面 长度为2的话 相当于直接相连的两个点 长度为3的话感觉很麻烦 可以维护最大最小 次大次小 答案为 (最大+次大) 或者 (最小+次小) 或者 (长度为3的链) 这样可做 阅读全文
摘要:
A:[NCT058A] 签到题 链接:https://ac.nowcoder.com/acm/contest/11198/A 签到题没啥好说的 code: #include<bits/stdc++.h> using namespace std; int n,q; int a[1000011]; in 阅读全文