![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
训练日常
本专栏的插图 皆出自acwing
小Q`
这个作者很懒,什么都没留下…
展开
-
2022.2.5 训练总结
1.题目链接:P3865 【模板】ST 表模板题2.题目链接:P2251 质量检测RMQ 区间最小值。3.题目链接:P1816 忠诚RMQ 区间最小值。4.题目链接:P2880 [USACO07JAN]Balanced Lineup GRMQ 区间最小值+区间最大值5.题目链接:AcWing 1273. 天才的记忆RMQ 区间最大值总结6.题目链接:AcWing 785. 快速排序快速排序模板题。 7.题目链接:AcWing 788. 逆序对的数量归并排序求逆序对的原创 2022-02-05 18:40:41 · 168 阅读 · 0 评论 -
2022.2.5 训练日记1 AcWing 1273. 天才的记忆
题目链接:天才的记忆题目分析:0.RMQ(区间最值问题)1.题解:题解code:#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int N = 200010, M = 18;int n, m;int w[N];int f[N][M];//初始化 按区间长度来初始化。vo原创 2022-02-05 11:20:30 · 197 阅读 · 0 评论 -
2022.2.4 训练日记3 AcWing 103. 电影
题目链接:电影题目分析:0.离散化1.参考以下题解:题解code:#include <bits/stdc++.h>using namespace std;const int N = 201000 ;int n,m;int a[N],b[N],c[N];vector<int> alls; int find(int x) //在alls中查找大于等于x的最小下标{ int l=0,r=alls.size()-1; while(l<原创 2022-02-04 16:08:47 · 522 阅读 · 0 评论 -
2022.2.4 训练日记2 AcWing 107. 超快速排序
题目链接:超快速排序题目分析:0.归并排序1.题解题解code:#include <cstdio>typedef long long LL;using namespace std;const int N = 500010;int n;LL q[N], w[N];//w为辅助数组LL merge_sort(int l, int r){ if(l == r) return 0; int mid = l + r >> 1;原创 2022-02-04 11:21:55 · 217 阅读 · 0 评论 -
2022.2.4 训练日记1 AcWing 106. 动态中位数
题目链接:动态中位数题目分析:0.堆1.参考以下题解:题解code:#include <iostream>#include <cstring>#include <algorithm>#include <queue>using namespace std;int main(){ int T; scanf("%d", &T); while(T --) { int n原创 2022-02-04 10:51:23 · 91 阅读 · 0 评论 -
2022.2.2 训练日记6 AcWing 1952. 金发姑娘和 N 头牛
题目链接:金发姑娘和N头牛题目分析:0.差分 + 离散化。1.题解参考题解code:#include <iostream>#include <cstring>#include <algorithm>#include <map>using namespace std;const int INF = 2e9;int n, x, y, z;int main(){ map<int,int> b;原创 2022-02-04 10:46:01 · 113 阅读 · 0 评论 -
2022.2.3 训练日记7 AcWing 1978. 奶牛过马路
题目链接:奶牛过马路题目分析:0.排序 + 前缀最值1.题解如下:题解code:#include <iostream>#include <cstring>#include <algorithm>#define x first#define y secondusing namespace std;typedef pair<int, int> PII;const int N = 100010, INF = 1e8;in原创 2022-02-03 21:07:45 · 84 阅读 · 0 评论 -
2022.2.3 训练日记6 AcWing 1996. 打乱字母
题目链接:打乱字母题目分析:0.二分 + 贪心1.参考以下题解:题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 50010;int n;string a[N], b[N], c[N];//a是原字符串,b是按最大排序,c是按最小排序int main(){ cin >>原创 2022-02-03 20:30:52 · 221 阅读 · 0 评论 -
2022.2.3 训练日记5 P3397 地毯
题目链接:地毯题目分析:0.二维前缀和+二维差分1.差分处理m次操作。2.求二维前缀和。code:#include<iostream>using namespace std;const int N = 1010;int s[N][N];//差分数组。int n,m;int main(){ cin >> n >> m; while(m --) { int x1, y1, x2, y2; cin >> x1 &g原创 2022-02-03 20:06:56 · 67 阅读 · 0 评论 -
2022.2.3 训练日记4 P1387 最大正方形
题目链接:最大正方形题目分析:0.二维前缀和1.预处理二位前缀和2.枚举正方形的边长R3.枚举正方形的位置,如果前缀和=R*R的话说明边长为R的正方形是存在的。code:#include<iostream>#include<algorithm>using namespace std;const int N = 110;int s[N][N];int n, m;int main(){ cin >> n >> m; /原创 2022-02-03 19:38:40 · 75 阅读 · 0 评论 -
2022.2.3 训练日记3 P3131 [USACO16JAN]Subsequences Summing to Sevens S
题目链接:题目题目分析:0.前缀和1.参考下面的题解:题解code:#include<iostream>#include<algorithm>using namespace std;const int N = 50010;int s[N];int first[7], last[7];int n;int main(){ cin >> n; for(int i = 1; i <= n; i ++) {原创 2022-02-03 19:23:54 · 107 阅读 · 0 评论 -
2022.2.3 训练日记2 P1083 [NOIP2012 提高组] 借教室
题目链接:借教室题目分析:0.二分答案 + 差分1.参考以下题解题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e6 + 10;int n, m;int a[N];//每一天的可用数//操作信息存储数组。struct str{ int d, s, t;}op[N];int原创 2022-02-03 18:35:57 · 61 阅读 · 0 评论 -
2022.2.3 训练日记1 P2678 [NOIP2015 提高组] 跳石头
题目链接:跳石头题目分析:0.二分+贪心1.参考以下题解题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 50010;int L, n, m;int d[N];bool check(int mid){ int last = 0, cnt = 0; for (int i =原创 2022-02-03 18:03:49 · 92 阅读 · 0 评论 -
2022.2.2 训练日记5 AcWing 113. 特殊排序
题目链接:特殊排序题目分析:0.二分1.题解链接题解code:class Solution {public: vector<int> specialSort(int N) { vector<int> res; res.push_back(1); for(int i = 2;i <= N;i++){ int l = 0,r = res.size() - 1;原创 2022-02-03 11:42:00 · 334 阅读 · 0 评论 -
2022.2.2 训练日记4 AcWing 102. bestcow围栏
题目链接:最佳cow围栏题目分析:0.二分+双指针+前缀和1.参考蓝书二分那一节或者下面的题解。题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5 + 10;int n, F;double a[N], s[N];bool check(double avg){ //预处理前缀和原创 2022-02-03 11:03:46 · 112 阅读 · 0 评论 -
2022.2.2 训练日记3 AcWing 100. 增减序列
题目链接:增加序列题目分析:0.差分经典例题。题解参考:蓝书23页。code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e5 + 10;int a[N];int b[N];//差分数组long long p, q;//q是正数和,p是负数和。int main(){ int n;原创 2022-02-03 10:12:58 · 102 阅读 · 0 评论 -
2022.2.2 训练日记2 AcWing 99. 激光炸弹
题目链接:激光炸弹题目分析:0.二维前缀和。1.参考蓝书22页。code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 5010;int s[N][N];//前缀和矩阵int n, m;int main(){ int cnt, R; scanf("%d%d", &cnt, &a原创 2022-02-02 19:12:07 · 109 阅读 · 0 评论 -
2022.2.2 训练日记1 AcWing 998. 起床困难综合症
题目链接:起床困难综合征题目分析:0.知识点:位运算1.思路参考蓝书第八页。code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef pair<string, int> PII;const int N = 100010;PII str[N];int n, m;int calc(int bits, int原创 2022-02-02 12:37:14 · 75 阅读 · 0 评论 -
2022.1.31 训练日记7 AcWing 98. 分形之城
题目链接:分形之城题目分析:0.递归 + 坐标变换1.参考:题解code:#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;typedef long long LL;struct point{ LL x, y;};point get(LL n, LL a){ if(原创 2022-02-02 18:19:15 · 89 阅读 · 0 评论 -
2022.1.31 训练日记6 AcWing 96. 奇怪的汉诺塔
题目链接:奇怪的汉诺塔题目分析:0.递推1.参考以下题解题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;int d[15], f[15];int main(){ d[1] = 1; for(int i = 2; i <= 12; i ++) { d[i] = 1 + d[i原创 2022-02-02 17:23:12 · 68 阅读 · 0 评论 -
2022.1.31 训练日记5 AcWing 91. 最短Hamilton路径
题目链接:最短Hamiltion路径题目分析:0.状态压缩DP。1.参考蓝书分析。code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 20, M = 1 << 20;int f[M][N];int n;int w[N][N];int main(){ cin >>原创 2022-02-02 12:53:00 · 61 阅读 · 0 评论 -
2022.1.31 训练日记4 AcWing 220. 最大公约数
题目链接:最大公约数题目分析:0.知识点:线性欧拉筛1.思路参考:最大公约数code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e7 + 10;int primes[N], cnt;int phi[N];bool st[N];long long s[N];//前缀和数组void init(原创 2022-02-02 11:59:06 · 88 阅读 · 0 评论 -
2022.1.31 训练日记3 AcWing 201. 可见的点
题目链接:可见的点题目分析:0.知识点:欧拉函数1.参考详见:题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1010;int primes[N], cnt;bool st[N];int phi[N];//欧拉函数void init(int n){ phi[1] = 1;//原创 2022-02-02 10:59:54 · 83 阅读 · 0 评论 -
2022.1.31 训练日记2 AcWing 93. 递归实现组合型枚举
题目链接:递归实现组合数题目分析:0.递归简单思维题。1.递归+剪枝。code:#include <iostream>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int N = 25;vector<int>ans;int n, m;void dfs(int u){ //如果当前的状态原创 2022-02-01 21:24:53 · 159 阅读 · 0 评论 -
2022.1.31 训练日记1 AcWing 92. 递归实现指数型枚举
题目链接:递归实现指数型枚举题目分析:0.递归简易思维题。1.依次考虑每个数选不选。code:#include <iostream>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int N = 20;int n;vector<int>ans;void dfs(int u){ if(u =原创 2022-02-01 21:07:56 · 150 阅读 · 0 评论 -
2022.1.30训练日记7 AcWing 94. 递归实现排列型枚举
题目链接:递归实现排列型枚举题目分析:0.简单DFS1.分析参考递归实现排列型枚举code:#include <iostream>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int N = 10;vector<int>ans;bool st[N];int n;void dfs(int u){原创 2022-02-02 12:13:46 · 158 阅读 · 0 评论 -
2022.1.30 训练日记6 AcWing 97. 约数之和
题目链接:约数之和题目分析:0.约数之和 + 分治 + 递归1.参考题解:题解code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;const int mod = 9901;int qmi(int a, int b){ int res = 1; while(b)原创 2022-01-30 18:49:50 · 395 阅读 · 0 评论 -
2022.1.30 训练日记5 AcWing 90.64位整数乘法
题目链接:64位整数乘法题目分析:题目求a乘b对p取模的值,乍一看很简单,但是事实不是如此。第一步:分析题目数据范围。发现a,b,p都是可以取到10的18次方。所以我们预想一下最坏的情况就是a和b都取10的18次方。那么a·b等于10的36次方超过了超长整型long long 的数值范围。所以解决方法一:用高精度算法。方法二:用龟速乘第二步:鉴于高精度算法代码较长所以我们选择用龟速乘算法。什么交龟速乘呢。龟速乘(快速加)和快速幂原理基本上一样。首先a·b我们可以把b写成几个数相加的结果。比如说37。原创 2022-01-24 22:02:33 · 391 阅读 · 0 评论 -
2022.1.30 训练日记 4 Acwing.200. Hankson的趣味题
题目链接:Hankson的趣味题题目分析:0.DFS+最大公约数+分解质因数思路code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;typedef pair<int, int> PII;const int N = 45000, M = 50;int primes[N],原创 2022-01-30 17:01:34 · 406 阅读 · 0 评论 -
2022.1.30 训练日记 3 AcWing 198. 反素数
题目链接:反素数题目分析:0.dfs + 约数之和思路参考蓝书。code:#include<iostream>#include<cstring>// #include<cstdio>由于这个题目的读入量很小,所以我们完全可以用cin来读#include<algorithm>using namespace std;int primes[9]={2,3,5,7,11,13,17,19,23};//primes的话一共是有9个对吧t原创 2022-01-30 13:07:07 · 518 阅读 · 0 评论 -
2022.1.30 训练日记 2 AcWing 1294. 樱花
题目链接:樱花题目分析:0.知识点:约数个数code:#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1000010;const int mod = 1e9 + 7;int primes[N], cnt;bool st[N];//线性筛法void init(int n){ for(int i原创 2022-01-30 11:41:48 · 299 阅读 · 0 评论 -
2022.1.30 训练日记 1 AcWing 1291. 轻拍牛头
题目链接:轻拍牛头题目分析:0.一道有关约数的题目。1.直接暴力的话,逐一判断其他的数是不是他的约数,这样时间复杂度是O(n^2) 会超时2.假设a是b的约数的话,那么b就是a的倍数,因此,当判断某一个数的时候,我们把这个数的倍数全部加上1,意思是,该数的约数个数又多了一个。3.简单的说,就是求一个数的倍数比求一个数的约数时间复杂度低。code:#include <iostream>#include <cstring>#include <algorith原创 2022-01-30 11:14:08 · 60 阅读 · 0 评论 -
2022.1.29 训练日记 7 AcWing 1018. 最低通行费
题目链接:最低通行费题目分析:0.线性DP,数字三角形模型。1.状态表示 f(i,j){ 属性:从起点出发,走到第i行第j列的所有方案集合:方案中的路线经过的所有物品的总价值最小Min2.状态转移 f(i,j)=min{f(i−1,j),f(i,j−1)}+w(i,j)code:#include<iostream>#include<algorithm>using namespace std;const int N = 110;int g[N][N原创 2022-01-30 00:10:12 · 216 阅读 · 0 评论 -
2022.1.29 训练日记 6 AcWing 1015. 摘花生
题目链接:摘花生题目分析:0.该题是一道线性DP(数字三角形模型)。1.状态表示 集合:定义f[i][j]为从(1, 1)到达(i, j)的所有方案 属性:最大值2.状态转移 (i, j)从(i-1, j)即上方过来 (i, j)从(i, j-1)即左方过来3.空间压缩 f[i][j]只需要用到这一层和上一层的f元素,所以可以压缩成滚动数组。在此之上,还可以直接压缩成一维数组。code:#include<iostream>#include<algo原创 2022-01-30 00:01:30 · 386 阅读 · 0 评论 -
2022.1.29 训练日记 5 AcWing 2005. 马蹄铁
题目链接:马蹄铁题目分析:0.dfs暴力搜索题。1.s[N][N] 存储图,如果s[1][1]==’)’提前结束,因为题目要求路径为(((…)))这种格式 st[N][N]记录走过的路径 一般来说,捡马蹄的方式为先捡 ( ,如果捡了 ) 那么之后就只能捡 ) ,直到 ( 的数目和 ) 的 数目一样多。dfs(x,y,l,r) ==> x,y为当前位置 , L 为已经捡了L个’(‘型马蹄铁,R为已经捡了R个’)‘型马蹄铁code:#include <iostream>原创 2022-01-29 23:47:17 · 106 阅读 · 0 评论 -
2022.1.29 训练日记 4 AcWing 2014. 岛
题目链接:岛题目分析:0.该题目是一个思维题。1.只考虑变化的部分O(n)2.对答案的影响 2.1 左边低 右边高 不变 2.2 左边高 右边低 不变 2.3 左边右边都比中间低 + 1 2.4 左边右边都比中间高 + 13.需要去重排序,把相同高度的小岛看作一个岛。4.排序后,同意高度要两个都计算完才可以和res比较。code:#include <iostream>#include <cstring>#include <algorithm&g原创 2022-01-29 23:03:18 · 176 阅读 · 0 评论 -
2022.1.29 训练日记 3 AcWing 2060. 奶牛选美
题目链接:奶牛选美题目分析:0.考察知识点:Flood Fill 1.先求一遍Flood Fill 存一下两个连通块。2.依次枚举两个连通块中的点。求一下曼哈顿距离,求min值即可。O(n^2)3.为什么求曼哈顿距离即可?证明:假设a,b两个点是我们所求的最优解。那么他们之间一定没有障碍点。如果有障碍点的话,说明他们之间的距离还可以更小。故最优解中间没有障碍点,只需要求一下曼哈顿距离即可。code:#include <iostream>#include <cstr原创 2022-01-29 18:18:41 · 80 阅读 · 0 评论 -
2022.1.29 训练日记 2 AcWing 1290. 越狱
题目链接:越狱题目分析:0.快速幂+组合数+容斥原理(补集思想)1.本题可以采用容斥原理补集的思想。考虑 n 个犯人,m种宗教,如何安排不会导致犯罪。第一个位置可以有 m 个选择,则与第一个相邻的第二个位置就只有 m−1种选择。考虑第 i个位置,则为了不和他左侧的 i-1 位置发生冲突,一共有 m−1种选择。因此不会导致犯罪的方案是: m⋅(m−1)^n-1则会导致犯罪的方案是:m^n−m⋅(m−1)^n−1code:#include <iostream>#includ原创 2022-01-29 12:53:26 · 200 阅读 · 0 评论 -
2022.1.29 训练日记 1 Acwing.1289. 序列的第k个数
题目链接:序列的第K个数题目分析:0.这是一个快速幂题目1.答案情况如下: 情况1:若a,b,c是一个等差数列,则第K项是a + (c - b) * (k - 1) 情况2:若a,b,c是一个等比数列,则第K项是a * (b / a) ^ (k - 1) 用快速幂求解。2.首先第一个问题:是否存在a,b,c,使得a,b,c既是一个等差数列,也是一个等比数列。证明:若a,b,c是一个等差数列,则a + c = 2b(1)若a,b,c是一个等比数列,则a * c = b^2(2)对(1)两原创 2022-01-29 11:20:31 · 178 阅读 · 0 评论 -
2022.1.28 训练日记 7 HDU - 3527 SPY
题目链接:SPY题面:The National Intelligence Council of X Nation receives a piece of credibleinformation that Nation Y will send spies to steal Nation X’s confidential paper. So the commander of The National Intelligence Council take measures immediately, he w原创 2022-01-29 00:08:03 · 168 阅读 · 0 评论