摘要:
F Auxiliary Set 树上LCA + DFS 注意一下输出格式! #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int t, n, q, ans; int fa[N]; // 存储点i的父亲节点 i 阅读全文
摘要:
B - Bracket Sequence 思路: 用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作。对于最外层的数,是没有计算的。 所以最后要单独判断栈是不是空的,如果不是空的,还要把这些数弹出来进行计算。 想差了一点,应该是计算完一个括号之后 阅读全文
摘要:
C. Manipulating History 题意:给出一些字符串,有原始串(只含一个字符的串)、被替换的串、替换串、 最终串(最后一行),求原始串。 2 a ab b cd acd Initially s is "a". In the first operation, Keine chooses 阅读全文
摘要:
D. Required Length 题意:给你一个长度n,一个数x,x每个后续状态可以由前一个状态乘以前一个状态的某一位上的数字得到,问最少多少步,能把x变成一个n位数。如果不能变成n位数,输出-1。 思路:bfs + map。map用来记录第一次到达某个数所要经过的步数,第一次找到的值就是步数的 阅读全文
摘要:
1、E - Fridge 教训:做题的时候,没有想清楚问题,把问题复杂化了 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 1010; string st; int cnt[N], m 阅读全文
摘要:
C. Sum of Substrings 题目大概意思,给你一个01串,求和最小,其中和是该串所有相邻字符所组成的十进制数的和。 如:0110, sum = 01 + 11 + 10 = 22。 通过观察我们可以发现,除了第一个位置和最后一个位置,其他位置上的1对和的贡献都是11。 所以我们只需要特 阅读全文
摘要:
Frogger 法一:floyd #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #include<iomanip> #define int long long int 阅读全文
摘要:
G water testing 题意:给你一个多边形(可能是凸多边形,也可能是凹多边形),问该多边形内有多少个整数点(不包含边界)。 思路:皮克定理 + 叉乘计算三角形面积:皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为S=a+b÷2-1,其中a表示多边形内部的点数,b表示 阅读全文
摘要:
F - Subarrays 题意:给你一个序列,问这个序列里有多少个子串的和能被k整除。 思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串。 因为求的是前缀和,所以取模后相等,做差刚好去掉这个模后结果。 某个位置前面有多少个取模和该位置取模相等的数,用map记录一下。 阅读全文
摘要:
E 爬塔 方法一:二分做法 预处理每个点所能到达的最远距离,存到vector里边,然后二分处理结果 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n, q, a[N], len, maxn; vect 阅读全文
摘要:
Palindrome 题意:给一个字符串,问最少加上多少个字符,可以使这个字符串成为回文串 思路一、直接dp(会爆内存) dp[i][j]表示区间[i,j]之间有最少需要加上多少个字符 状态转移方程:如果s[i] = s[j], 则dp[i][j] = dp[i + 1][j - 1]; 如果s[i 阅读全文
摘要:
[神坛]pta *相邻两条边围成的三角形面积会是最小的 极角排序+叉积计算三角形面积 #include<bits/stdc++.h> #define int long long using namespace std; const int N = 2e5 + 10; int n, m; double 阅读全文
摘要:
很好的一道bfs题目,到达岸边可以看成是最后一步 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n, dist[N], pre[N]; double d, dis; struct node{ doub 阅读全文
摘要:
在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继) while(l<r) { int mid=(l+r)/2; if(a[mid]>=x) r=mid; else l=mid+1; } return a[l]; 在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱) while( 阅读全文
摘要:
1、巴什博弈 阅读全文
摘要:
一、相关概念: 1、二分图 把图中的点分到两个集合中,集合内的点之间没有边相连,边存在于两个集合之间 2、匹配、最大匹配、完美匹配 匹配:设G为二分图,若在G的子图M中,任意两条边都没有公共节点,那么称M为二分图G的一组匹配。 最大匹配:一个图的所有匹配中,所含匹配边数最多的匹配 完美匹配:存在某种 阅读全文
摘要:
四、编程部分 1、sorted函数: sorted(iterable, cmp=None, key=None, reverse=False) #iterable:可迭代的对象 #cmp:比较规则 #key:用来进行比较的对象,只有一个参数 2、eval()函数: 阅读全文
摘要:
一、基本概念 1、链式区间dp for(int len = 2; len <= n; len++){ //枚举区间长度 for(int i = 1; i + len - 1 <= n; i++){//枚举左边界 int j = i + len - 1; //有边界 for(int k = i; k 阅读全文