01 2022 档案
摘要:这里提供一种无脑的非数据结构方法。 很明显不能暴力,我们尝试记录下字符串 1、4、5 出现次数,这样单次修改时可以做到最坏 O(n)O(n)O(n) 的复杂度,与暴力一样。但是询问可以做到 O(log2n)O(\log_2 n)O(log2n) 复杂度,也就是快速幂的复杂度。 但是为了区别与其他
阅读全文
摘要:题意: 交互题,有一个地图,里面有些是障碍,有些是空地。需要实现函数 string find_out_map(int x, int y, int n),其中 x 和 y 是一个地图的某个位置的坐标,这个位置没有障碍。同时可以调用 bool move_to(char c) 表示从当前位置往 WASD
阅读全文
摘要:很容易想到多次计算同一个 XiX_iXi 会浪费时间,不妨记录下每一个 XiX_iXi 出现的次数,然后用前缀和可以做到 O(1)O(1)O(1) 询问,O(nlogn)O(n \log n)O(nlogn) 预处理。 代码: #include <cstdio> #include <iostr
阅读全文
摘要:其实就是求反质数,与这题很像,只不过数据范围变了。考虑打表即可。 关于反质数的更多信息,请看这里。 因为在 [1,1017][1, 10^{17}][1,1017] 中的反质数其实是很少的,所以在输出答案时其实不需要二分,暴力即可。 #include <cstdio> using namespace
阅读全文
摘要:给一个 Dijkstra 的 484848 分算法,正解想不出来了? 思路倒也很简单,Dijkstra 过程中记录一下路径,就可以跑最短路了,如果最短路小于等于 ttt,直接转移。不然就到走 ttt 步的位置上。 代码: #include <iostream> #include <cstdio> #
阅读全文
摘要:传送门:CF1162B Double Matrix 考虑贪心,我们只能交换 ai,ja_{i,j}ai,j 和 bi,jb_{i,j}bi,j,所以我们考虑将 ai,ja_{i,j}ai,j 和 bi,jb_{i,j}bi,j 中小的数放入 ai,ja_{i,j}ai,j,大的数放入 bi
阅读全文
摘要:本题标签是贪心、字符串和前缀和,但是最重要的是动态规划。 我们考虑设 fif_ifi 表示前 iii 个字符最多段数,很显然我们枚举 jjj 从 111 到 iii,对于每个 [j,i][j,i][j,i] 求一次数字和,如果为 333 就对贡献加 111。 但是很明显这个复杂度是 O(n2)O(
阅读全文
摘要:明显看到,题目时间限制 500ms500ms500ms,暴力肯定过不了。但是我们观察一下,需要 m<nm < nm<n 且 f(m)>f(n)f(m) > f(n)f(m)>f(n),我们先用暴力看一下规律: #include <bits/stdc++.h> using namespace std;
阅读全文
摘要:看到大家都是暴力枚举,但是其实这道题有数学方法。 首先,很明显,第一次找到一个出现次数最大的字符后,每次都是加上这么多同样的字符,这样才能最快。 假设原串长度为 sss,原串中出现次数最大的字符出现过了 nnn 次,按照题意,最后需要长度 ≥l\ge l≥l。可以列出方程 s+∑i=0k2i×n≥l
阅读全文
摘要:模拟即可,但是一定要注意四舍五入的问题。第一次统计的平均值不用四舍五入,但是第二次去除掉不合法的后取的平均值要四舍五入,推荐用 round 函数,其他就是模拟即可。 #include <bits/stdc++.h> using namespace std; #define int long long
阅读全文
摘要:打表即可: #include <bits/stdc++.h> using namespace std; #define int long long int ans[25]; signed main() { ans[1] = 1; ans[2] = 0; ans[3] = 18; ans[4] = 0
阅读全文
摘要:每座城市 pi\large p_ipi 距离起点位置为 ∣pi−x∣ \lvert p_i-x \lvert∣pi−x∣,d dd 满足题意时当且仅当 d ∣ ∣pi−x∣(i=1,2,3,……,n) d \,\,|\,\, |p_i-x|(i=1,2,3,……,n)d∣∣pi−x∣(i=1,
阅读全文
摘要:既然标签是暴力,那就别加后面三个点啊!毕竟标签没有线段树。 传送门:P1186 不就是暴力吗?先跑一遍 Dijkstra,记录最短路的每一条边。然后删除每一条边再跑一次最短路并更新答案。但是这样会超时,最后三个点过不去。但是,不要忘了,我们有时在比赛时不会写 dp 的题目可以暴力 dfs,虽然会超时
阅读全文
摘要:传送门:SP11736 PTIME - Prime Time 额,这个题目跟我自己在某个团队出的题目类似,是我在某次数学课后想到的题目。我的想法是预处理所有 ≤n\le n≤n 的质数,然后每个质数处理一遍即可。 代码: #include <iostream> using namespace std
阅读全文
摘要:传送门:SP1163 JAVAC - Java vs C ++ 很明显一字符串模拟题,但是要考虑几个问题,这是翻译没有写的,首先如果 _ 后面还是 _,要输出 Error!;第二,如果字符串末尾或第一个是 _,也要输出 Error!;最后,如果字符串第一个是大写,也要输出 Error!。
阅读全文
摘要:提供三种做法: 1、Floyd 由于 n≤200n \le 200n≤200,而弗洛伊德的复杂度是 O(n3)O(n^3)O(n3),这道题需要全源最短路,而弗洛伊德是最好写的,也是最能令人理解的。还不会弗洛伊德的看这里。 代码:这里。 2、关于SPFA,它复活了! 众所周知,一遍全源最短路其实就相
阅读全文
摘要:本题不难,用 map 模拟即可。注意要倒序模拟,代码: #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; map<string, bool> mp; string s[N]; int main() { int n
阅读全文
摘要:动态规划,与这题基本相同,只不过有多组测试。压行即可: #include<bits/stdc++.h> using namespace std; #define R(a,b) for(a=1;a<=b;a++) const int N=1e3+5;int a[N][N],i,j,n,T,g;main
阅读全文
摘要:话说为啥你们都用快读快写,我用 cout 和 cin 也过了?(其实我是懒)。 很简单的模拟,每次交换时判断当前位置是否在交换的位置 x,yx,yx,y 中,在的话就交换,不在啥都不用做,中途如果进坑就直接退出。 代码: #include <iostream> #include <algorithm
阅读全文
摘要:一道贪心题目,设定 mpij{mp_i}_ jmpij 表示第 iii 道题目选 jjj 的人数,jjj 为字符类型,枚举每一个 mpij(1≤i≤m, j=A,B,C,D,E){mp_i}_ j(1 \le i \le m, \,\,j = A,B,C,D,E)mpij(1≤i≤m,j=A
阅读全文
摘要:水题,众所周知,两点之间直线距离: (x2−x1)2+(y2−y1)2\Large \sqrt{(x2 - x1)^2+(y2-y1)^2}(x2−x1)2+(y2−y1)2。 然后就能过了: #include <iostream> #include <iomanip> #include <alg
阅读全文
摘要:传送门:P7158 本题考虑动态规划,很明显我们需要一个 O(n)O(n)O(n) 左右的动态规划。 首先我们可以对数进行分析,假设有 abcd‾\overline{abcd}abcd,那么对于第 555 位,有 999 种方法,就是 000 到 999 中少去掉一个 kkk,假设 abcd‾\ov
阅读全文
摘要:传送门:P7381 [COCI2018-2019#6] Sličice 其实是一道类似多重背包的题目,定义 dpij{dp_i}_ jdpij 表示代表前 iii 个球队共收集 jjj 张时最大分数。可以求出状态转移方程 dpij=max{dpij,dpi−1j−g+bpi+g}{dp_i}_
阅读全文
摘要:传送门:AT685 準急 动态规划,fi0{f_i}_0fi0 表示第 iii 个点不停靠方案数,fi1{f_i}_1fi1 表示第 iii 个点停靠方案数。 代码: #include <iostream> using namespace std; #define int long long
阅读全文