
Acwing刷题
会划水才能到达彼岸
ACM-ICPC 现役(铜牌) 目前:Codeforces Rating: 2172
展开
-
《算法从入门到入土系列》第一集 搜索专题(DFS与BFS)题目解析 + 练习题单(更新ing)
搜索专题(DFS与BFS) 从入门到入土 题目解析 + 练习题单搜索BFSAcWing 844. 走迷宫Flood Fill 算法AcWing 1097. 池塘计数AcWing 1098. 城堡问题AcWing 1106. 山峰和山谷最短路模型AcWing 1076. 迷宫问题(单源最短路)AcWing 188. 武士风度的牛LUOGU P1443 马的遍历多源BFSAcWing 173. 矩阵距离最小步数模型AcWing 1107. 魔板双端队列广搜AcWing 175. 电路维修双向广搜AcWing 1原创 2021-03-22 20:17:09 · 4747 阅读 · 11 评论 -
Acwing 寒假每日一题 1月12日
422. 校门外的树暴力解法区间合并线段树解法暴力解法#include<iostream>#include<cstdio>using namespace std;const int N = 10010;bool tree[N];int main(){ int len, m; cin >> len >> m; for (int i = 0; i <= len; i++) tree[i] = true; in原创 2021-01-27 23:58:42 · 226 阅读 · 0 评论 -
Acwing 寒假每日一题 1月11日
AcWing 429. 奖学金一个简单的排序和结构体的运用#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int N = 310;struct Stu { int c, m, e; int sum; int id; bool operator< (const Stu& W) const {原创 2021-01-27 20:31:44 · 104 阅读 · 0 评论 -
Acwing 寒假每日一题 1月10日
AcWing 898. 数字三角形原题链接:https://www.acwing.com/problem/content/900/#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int N = 510;int f[N][N];int main(){ int n; cin >&g原创 2021-01-27 18:50:20 · 134 阅读 · 0 评论 -
数学(一) 筛质数
筛质数的几种方法从例题 Acwing 868 来看给定一个正整数n,请你求出1~n中质数的个数。输入格式共一行,包含整数n。输出格式共一行,包含一个整数,表示1~n中质数的个数。数据范围1≤n≤1061≤n≤10^61≤n≤106输入样例:8输出样例:4#include<iostream>#include<cstdio>using namespace std;const int N = 1000010;int cnt=0;int prime[N原创 2020-09-12 11:58:09 · 273 阅读 · 1 评论 -
基础算法(12) —— 位运算
位运算两种简单操作1. 求n的二进制表示中第k位是多少。步骤:①先把第k位移到最后一位 用 n>>k;②看个位是多少n>>k&1#include<iostream>#include<cstdio>#include<string>#include<cstring>using namespace std;int main(){ int n = 10; for(int k = 3; k >原创 2020-09-03 01:59:32 · 283 阅读 · 0 评论 -
Module1 —— 双指针算法
两个指针分别作用在两个序列(例如:归并排序)两个指针同时作用在同一个序列(例如:快速排序)一般的写法都长这样:for (int i = 0, j = 0; i < n; i++ ){ while (j < i && check(i, j)) j++ ; // 具体问题的逻辑}双指针的核心思想:优化for(int i = 0;i < n;i++) for(int j = 0;j < m;j++)时间复杂度为 O(n2原创 2020-09-02 14:17:53 · 203 阅读 · 0 评论 -
基础算法(10) —— 差分
一维差分a1,a2,a3,...,ana_1,a_2,a_3,...,a_na1,a2,a3,...,an 前缀构造 b1,b2,b3,...,bnb_1,b_2,b_3,...,b_nb1,b2,b3,...,bn 差分使得:ai=b1+b2+...+bna_i=b_1+b_2+...+b_nai=b1+b2+...+bn(对b[ ]求前缀和就是a[ ]);其中:b1=a1b_1=a_1b1=a1;b2=a2−a1b_2=a_2-a_1b2=a2−a1;b原创 2020-09-02 10:14:48 · 319 阅读 · 0 评论 -
基础算法(9) —— 前缀和(一维+二维)
前缀和前缀和的定义:求前n项和例题:给定一个数列 an(1≤n≤100000){a_n}(1≤n≤100000)an(1≤n≤100000),有 q(1≤q≤100000)q(1≤q≤100000)q(1≤q≤100000)次询问,每次询问树立的第m个元素到第n个元素的和。如果是暴力解法:有q次询问,每次都要扫一遍这个区间,最大时间复杂度是O(q×n)O(q×n)O(q×n)优化:(前缀和)复杂度主要是在:q次查询,就是要扫q次区间。前缀和的思想: 开一个更大的数组,将对区间的查询,转换为对原创 2020-09-01 00:38:55 · 243 阅读 · 0 评论 -
基础算法(8) —— 高精度除法模板
高精度除法给定两个非负整数A,B,请你计算 A / B的商和余数。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共两行,第一行输出所求的商,第二行输出所求余数。数据范围1≤A的长度≤100000,1≤A的长度≤100000,1≤A的长度≤100000,1≤B≤100001≤B≤100001≤B≤10000B一定不为0B 一定不为 0B一定不为0输入样例:72输出样例:31e#include<iostream>#include<cstdio原创 2020-08-31 23:21:35 · 256 阅读 · 0 评论 -
基础算法(7) —— 高精度乘法模板
高精度乘法给定两个正整数 AAA 和 BBB,请你计算A×BA × BA×B的值。输入格式共两行,第一行包含整数 AAA,第二行包含整数 BBB。输出格式共一行,包含 A×BA × BA×B的值。数据范围1≤A1≤A1≤A 的长度≤100000≤100000≤1000000≤B≤100000≤B≤100000≤B≤10000输入样例:23输出样例:6其中计算步骤为:C0=(3∗12)C_0=(3*12)C0=(3∗12) % 10=610=610=6t1=(3∗12)原创 2020-08-31 19:03:01 · 647 阅读 · 0 评论 -
基础算法(6) —— 高精度减法模板
高精度减法模板及例题:模板题:给定两个正整数,计算它们的差,计算结果可能为负数。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的差。数据范围1≤1≤1≤ 整数长度 ≤105≤105≤105输入样例:3211输出样例:21高精度减法步骤:用字符串储存输入数据将字符串转化成 vector数组(逆序)比较A,B的大小判断是否有 A≥BA≥BA≥B 的方法是:(1)判断A的位数与B的位数是否不相同: 不相同则返回A.size()>B原创 2020-08-31 11:58:37 · 266 阅读 · 0 评论 -
DFS 知识点以及模板题
DFS —— 不撞南墙不回溯 —— 死脑筋BFS —— 眼观六路耳听八方 —— 一层一层的搜索DFS :DFSBFSstack(栈)queue(队列)O(h)O(h)O(h)O(2h)O(2^h)O(2h)不具有最短路性质具有最短路性质原创 2020-08-20 02:59:13 · 314 阅读 · 0 评论 -
基础算法(5) —— 高精度加法模板
大整数相加 (高精)给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤1≤1≤ 整数长度 ≤100000≤100000≤100000输入样例:1223输出样例:35数组下标:0 1 2 3 4 5 6 7 8存储数字:9 8 7 6 5 4 3 2 1逆序存储,因为存在进位情况,可以用push_back在高位补上1(详情思路请看代码)#include<iostream>#include<ve原创 2020-08-15 17:36:24 · 200 阅读 · 0 评论 -
基础算法(4) —— 浮点数二分模板
浮点数二分用二分的思想可以找出这个分界点。假设我们想二分出来红色(不满足条件的范围)这边的分界点:找一个中间值mid :l+r >> 1(因为是浮点数,所以可以严格的二分,即mid就是中点)写一个函数check()判断时mid时在满足条件(绿色)范围内,还是在不满足条件(红色)范围内。当区间长度很小的时候,可以近似的认为找到了答案,例:r-l ≤ 10−6^{-6}−6 (如果题目要求保留4位小数,则应该写到-6次方,比有效小数的位数多2)例题:用二分法做一个sqrt函数 (只原创 2020-08-14 15:35:32 · 383 阅读 · 0 评论 -
基础算法(3) —— 整数二分模板
二分整数二分用二分的思想可以找出这个分界点。假设我们想二分出来红色(不满足条件的范围)这边的分界点:找一个中间值mid :l+r >> 1写一个函数check()判断时mid时在满足条件(绿色)范围内,还是在不满足条件(红色)范围内。(注意:这里为什么是 l+r+1 )For example:如果 l = r - 1 (即左右边界只相差1) ,假设为l+r >> 1 (向下取整)假设if(check(mid)) 判断为true (此时mid = l + r >原创 2020-08-14 03:46:47 · 300 阅读 · 0 评论 -
基础算法(2) —— 归并排序模板
归并排序 —— 分治思想确定分界点:mid == l+r >> 1递归排序 ( left —— right)归并:把两个有序的数组合并成一个有序的数组(合二为一)(⭐)双指针算法:首先 a[n] 的最小值和 b[n] 的最小值进行比较,将两者的最小值输出到 new[数组] 当中;假设 a[n] 的最小值 < b[n] 的最小值,则a[n]的最小值输出到new[0]当中,那么下一步,a[n]的指针右移一步,再与b[n]的最小值进行比较,输出二者的最小值;一直到a[n]和b[原创 2020-08-12 16:53:53 · 415 阅读 · 0 评论 -
基础算法(1) —— 快速排序模板
给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 nnn。第二行包含 nnn 个整数(所有整数均在 111~109109109 范围内),表示整个数列。输出格式输出共一行,包含 nnn 个整数,表示排好序的数列。数据范围1≤n≤1000001≤n≤1000001≤n≤100000输入样例:555333 111 222 444 555输出样例:111 222 333 444 5551.快速原创 2020-08-12 13:08:36 · 332 阅读 · 0 评论