05 2021 档案
摘要:原题链接 题意:\(f(i, j)\) 代表了从 \(i\) 到 \(j\) 的简单路径边权和。要求构造给定树的边权使得 \(\sum_{i=1}^{n} \sum_{j = i}^{n}f(i, j)\) 最大。 题解:设一条边为 \(<u, v>\) 然后设 \(cnt_u\) 为节点 \(u\
阅读全文
摘要:三元环 问题描述,给定无向图,然后求出三元环个数 建图做法:先把无向图转化为 \(DAG\) ,把边去重,然后把度数从小的点连向度数大的点。 显然的是,每个三元环只能被找到一次。 时间复杂度证明: 可知边 \((x, y)\) 被遍历的次数是 \(out_y\),所以总复杂度是 \(m\times
阅读全文
摘要:原题链接 题意:求 \(\sum _{x = 0}^{m-1}[gcd(a, m) = gcd(a + x, m)]\) 题解:\(d = gcd(a, m)\) 然后发现 \(gcd(a, m) = gcd(\frac{a}{d}, \frac{m}{d})\) 并且 \((a+m) \mod m
阅读全文
摘要:\(\varphi (x) = p_1^{k1-1} (p_1-1) \times p_2^{k2-1} (p2-1) \times p_3^{k3-1}(p3-1)\) \(\varphi (x) =x \times \frac{(p_1-1)}{p_1} \times \frac{(p_2-1)
阅读全文
摘要:原题链接 题意:每次加一个数,要求最小 $\sum max_ - min_, 题解:本来以为就是纯贪心,然后发现竟然是区间dp,就是先排完序,然后就加入然后取 \(min\)。 代码: #include <iostream> #include <bits/stdc++.h> using namesp
阅读全文
摘要:普通莫队 把区间分成许多个长度为 \(\sqrt n\) 的小区间,然后以左端点区间位置为第一关键字,然后右端点为第二关键字排序。 这样的时间复杂度是 \(O(\sqrt n\times n)\) 的时间复杂度,因为,一个区间一个区间的看,第一个区间,很显然是右指针必须走 \(n\) 步,然后左指针
阅读全文
摘要:原题链接 题意:给出 \(|s| \lesqlant 1500\) 并且给出哪些字母是好哪些是坏,然后要求求出一共有多少本质不同的字串,使得坏串个数不超过 \(k\) 个。 题解:显然可以直接 \(n^2\) 暴力找然后,用字符串 \(Hash\) 判重。 代码: #include <bits/st
阅读全文
摘要:Hash #include <algorithm> #include <cstring> #include <iostream> #include <vector> #include <map> using namespace std; typedef long long ll; typedef u
阅读全文
摘要:原题连接 题意:给出 \(n \leqslant\) 和 \(m \leqslant 10\) 行的矩阵,要求出来,炮兵能打到横竖打两格,然后要求最多放多少个炮兵。 题解:当发现尽管每行是 \(2^m\) 即最大是 \(1024\) 但是如果把限制加入,每行每个炮兵相邻不能小于 \(2\),所以预处
阅读全文
摘要:原题链接 题意:给出 \(n \leqslant 3e5\) 个 \(a_i \leqslant 1.5e7\),要求出来删除最少的数使得所有数的最小公倍数增加。 题解:其实已经很接近想法了,只不过空间存不下。想的是,应该是把所有数除以最小公倍数,然后当前最小公倍数是 \(1\),然后要求最少删除几
阅读全文
摘要:原题链接 题意:求出在从 \(1\) 到 \(10^n-1\) 的范围所有数,有多少连续的 \(i\) 位相同的段个数。 题解:就计数一下,首先是边缘然后是放中间。 代码: #include <iostream> #include <algorithm> #include <cmath> #incl
阅读全文
摘要:原题链接 题意:给出一棵树,边权全为 \(1\),要求出所有的距离为 \(k\) 的点对。 题解:暴力树上 \(dp\) 真的没想到,\(dp_{i,j}\) 代表的是距离 \(i\) 点的距离为 \(k\) 的点对数量。 代码: #include <iostream> #include <bits
阅读全文
摘要:原题链接 题意:博弈,\(n\) 个游戏,每个游戏有 \(b_i\) 堆石子,每个人只能拿 \(a_i\) 的指数倍的数量,然后不能行动的人输。 题解:一开始莽规律,很容易的发现是和奇偶性改变有关,然后看出来如果 \(a_i\) 是奇数,那么 \(b_i\) 奇数则先手必胜为 \(sg_i\) 为
阅读全文
摘要:原题链接 题意:给出 \(n\) 个数,然后求出每个数是否存在两个因子大于 \(1\) 并且 \(gcd(d_1+d_2, a_i) = 1\)。 题解:可以知道,如果 \(gcd(x,y)=1\) 那么必然有 \(\forall p \in (y \equiv 0 \mod p)\) 并且 \(x
阅读全文
摘要:原题链接 题意:给出 \(n\) 个数 $a_1, a_2, a_3···a_n$求问有多少个四元组 \((i,j,k,l)\),使得这个四元组满足下列条件:\(1 \leqslant i < j < k \leqslant l\)。 题解:就是枚举中间的两个 \(j,k\),真的就是没有想到。 代
阅读全文
摘要:原题链接 题意:给出一个序列长度为 \(n \leqslant 1e6\),$a_i \leqslant 1e9$然后要求取某些数字,其和为 \(m \leqslant 3000\) 的倍数,是否可以。 题解:先把所有数都作为 \(a_i = a_i \mod m\) 存起来。然后可知,如果数量大于
阅读全文
摘要:原题链接 题意:给出 \(n\times m\) 的矩阵,然后构造出一个矩阵,在原矩阵上能给某个数加 \(1\) 或者不加,要求矩阵里所有元素相邻的不相同。 题解:都说是很显然的套路,然而我并不知道,奇数和偶数不相等,所以,让每个斜对角线都是奇偶奇偶这样就可以,然后奇数+1就是偶数。 代码: #in
阅读全文
摘要:原题链接 题意:给出一个括号序列,然后要求 \(m < 1e5\) 个区间询问,求给出区间内,合法的括号序列的长度。 题解:想到了可能用线段树做,结果没想到是,线段树记录的是非合法的向左的和向右的,然后每次询问直接剪掉非合法向左和向右的即可。 代码: #include <bits/stdc++.h>
阅读全文
摘要:原题链接 题意:一棵树,有高度,在一维平面上,可以向左向右砍到,不允许重叠,然后求最大砍倒树的数量。 题解:从左往右的话,就现往左倒,如果不可以往左倒,就往右倒。 代码: #include <bits/stdc++.h> using namespace std; typedef long long
阅读全文
摘要:原题链接 题意:给一个数字,要求构造一个数字,只通过删除某些位的数,得到的是能整除 \(8\) 的数字。 题解: 代码: #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 2e5 + 1
阅读全文
摘要:原题链接 题目:给了数字位数和数字位数之和,要构造出最大的数字和最小的数字。 题解:就是想着让 \(9\) 往后并且让 \(1\) 往前,然后中间用 \(0\),注意无效的时候是 \(s = 0\) 并且 \(m \neq 1\) 代码: #include <iostream> #include <
阅读全文
摘要:原题链接 题意:求字符串中是否存在一个 \(AB\) 和 \(BA\),他们不重叠。 题解:直接把 \(BAB\) 和 \(ABA\) 记录数量的同时,转化为别的字符,然后统计 \(AB\) 和 \(BA\) 然后判断答案。 代码: #include <iostream> #include <cst
阅读全文
摘要:原题链接 题意:有 \(k\) 叉树,边权是从 \(1\) 到 \(k\),要求边权和为 \(n\),至少有一条边的边权大于 \(d\) 的路径总数量。 题解:因为边权连续,所以 \(f_i = \sum_{j = n-k}^{j < i} f_j\) 就是所有情况的路径数量,然后还有就是,\(g_
阅读全文

浙公网安备 33010602011771号