
yxc yyds
陵游gentian
这个作者很懒,什么都没留下…
展开
-
并查集整理
并查集可以解决的问题:核心操作 findint find(int x) { if (p[x] != x) p[x] = find(p[x]); return p[x];}初始化(最开始代表一个点是一个集合)for(int i = 1; i <= n; i++) p[i] = i;判断两个元素是否属于一个集合if(find(a) == find(b)) cout << "Yes" << endl;else cout << "原创 2022-03-28 11:13:59 · 194 阅读 · 0 评论 -
PAT 第三讲 进位制
10进制转换成b进制带余除法思想如图所示,输出的时候需要逆向输出vector<int> nums;while(n) nums.push_back(n % b), n /= b;// 反向输出for(auto i = nums.rbegin(); i != nums.rend(); i++) cout << *i << ' ';回文数判断思想:双指针bool check(vector<int> &v) { for (int原创 2022-03-12 16:07:50 · 139 阅读 · 0 评论 -
PAT 第四讲 排序
结构体重载比较符号// 排序规则 按照 1. total 降序 2. cnt 降序 3. id 升序 进行的排序 bool operator<(const Student &t) const { if (total != t.total) return total > t.total; if (cnt != t.cnt) return cnt > t.cnt; return id < t.id;}自定义比较函数cmp(调用 sort() 时使用)// id原创 2022-03-11 23:53:59 · 1331 阅读 · 0 评论 -
AcWing 蓝桥杯C++ AB组辅导课 第一讲递归与递推
蓝桥杯C++ AB组辅导课例题92. 递归实现指数型枚举AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int N = 16;int st[N];int n;void dfs(int u) { if(u == n) { for(int i = 0;原创 2022-01-29 09:15:36 · 990 阅读 · 0 评论 -
AcWing 1月9日每日一题 2058. 笨拙的手指
AcWing 2058. 笨拙的手指思路分析:枚举的思想,因为题目中明确说明只有一位不同,所以可以把所有情况枚举出来,1e9的二进制最多不超过30位,三进制同理,因此分别进行枚举后,求出10进制的集合,集合的交集即为所求答案。AC代码:#include <bits/stdc++.h>using namespace std;// b进制 转换为 10进制int get(string s, int b) { // 秦九韶算法 int res = 0; fo原创 2022-01-09 23:52:01 · 463 阅读 · 0 评论 -
AcWing 844. 走迷宫 (BFS模版题)
AcWing 844. 走迷宫 (BFS模版题)思路分析BFS模版题,BFS是有一个小模版的,需要使用队列,这里是两种代码,一种是直接使用STL容器中的queue,另外一种是数组模拟队列AC代码1直接使用STL容器#include <iostream>#include <cstring>#include <queue>using namespace std;typedef pair<int, int> PII;const int N原创 2021-11-09 21:45:11 · 228 阅读 · 0 评论 -
AcWing 843. n-皇后问题 DFS
AcWing 843. n-皇后问题思路分析经典dfs问题,这里提供两套代码,一种经典的思路,一种利用了n皇后的游戏规则AC代码1一个格子一个格子枚举,时间复杂度2的n次方的n次方需要注意的是,一些限制条件#include <iostream>using namespace std;const int N = 20;int n;char c[N][N];bool row[N], col[N], dg[N], udg[N];// 枚举每个格子void dfs(i原创 2021-11-09 20:35:37 · 3110 阅读 · 0 评论 -
AcWing 842. 排列数字 DFS
思路分析:DFS深度优先搜索,就是按照每一位进行搜索,然后用过的数有一个标识即可AC代码:#include <iostream>using namespace std;const int N = 10;int path[N];bool st[N];int n;void dfs(int u) { if(u == n) { for(int i = 0; i < n; i++) { if(i != n - 1) .原创 2021-10-26 09:19:54 · 166 阅读 · 0 评论 -
leetcode 78. 子集
leetcode 78. 子集思路分析:AC代码:class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> res; // 最终答案 int n = nums.size(); // nums里有n个元素时,枚举 [0,2^n - 1]原创 2021-03-31 20:34:48 · 94 阅读 · 0 评论 -
AcWing 15. 二维数组中的查找
AcWing 15. 二维数组中的查找思路分析:AC代码:class Solution {public: bool searchArray(vector<vector<int>> array, int target) { // 最坏的做法是 O(n^2) 全部遍历 // 提供一个线性做法:每次都和右上角的数进行比较,每次比较完后,要么行数-1,要么列数-1,时间复杂度 O(n) if (array.empty() |原创 2021-03-31 12:31:56 · 106 阅读 · 0 评论 -
AcWing 77. 翻转单词顺序
AcWing 77. 翻转单词顺序思路分析:在不开辟额外空间的前提下,一步没有办法很好的解决该问题,那么就分成两步。先翻转整个句子。扫描出每个单词,再将每个单词进行单独翻转。翻转整个字符串代码: for(int i = 0 ,j = s.size() - 1; i < j; i++ , j--) swap(s[i],s[j]);可以用库函数替代 reverse(s.begin(),s.end());AC代码:class Solution {public: s原创 2021-03-30 18:42:12 · 110 阅读 · 0 评论 -
AcWing 19. 二叉树的下一个节点
AcWing 19. 二叉树的下一个节点思路分析:分当前结点有没有右子树两种情况去讨论如果有右子树:根据中序遍历(左根右)所要找的点就是右子树最左边的那个点。如果没有右子树:根据中序遍历(左根右)所要找的点应该是父结点往上遍历,其实就是遍历的结点如果不在其父结点的右链上了,取该父结点的父结点,如果在左链上,直接取其父结点就好。AC代码:class Solution {public: stack<TreeNode*> s; TreeNode* inorderSu原创 2021-03-30 11:01:07 · 141 阅读 · 0 评论 -
AcWing 1497. 树的遍历
AcWing 1497. 树的遍历知识点:层序遍历就是宽搜,也就是bfs,一层一层搜索给一棵树的中序和后序,能还原出这棵树利用代码实现还原树的过程AC代码:#include <iostream>#include <cstring>#include <algorithm>#include <unordered_map>#include <queue>using namespace std;const int N =原创 2021-03-25 21:39:40 · 185 阅读 · 0 评论 -
位运算 求任意二进制中1的个数
是AcWing传送门呀~主要考查位运算的相关知识。这里补充一个 lowbit函数:其主要作用是:返回x的最后一位1及以后的0lowbit函数的具体实现:int lowbit(int x){ return x & -x; // lowbit 这个函数功能:求出x最后一位1及以后的0的二进制数}思路分析:那么我们这个题,就可以利用这个lowbit函数进行操作每次减去x的最后一位1及以后的0然后直到x变为0减去几次,就是有几个1AC代码:#include原创 2021-03-23 10:57:05 · 182 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-02-04 a^b
AcWing 89. a^b(传送门)思路分析:快速幂的模板题。AC代码:#include <iostream>#define ll long longusing namespace std;ll quick_pow(ll a,ll b,ll c) { ll ans = 1 % c; while(b) { if(b&1) ans = (ans * a) % c; a = (a*a) % c;原创 2021-02-04 23:53:41 · 131 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-17 奖学金
AcWing 429. 奖学金(传送门)思路分析:这是一个多关键字排序问题。总分,高在前语文,高在前学号,小在前这里提供两种方法:写法1:重载小于号AC代码:#include <iostream>#include <algorithm>using namespace std;const int N = 310;int n;struct Student { int sto, sum, chinese, math, english;原创 2021-02-03 21:04:38 · 163 阅读 · 0 评论 -
递归实现指数型枚举
AcWing 92. 递归实现指数型枚举思路分析:递归。AC代码:#include <iostream>#include <cstdio>using namespace std;const int N = 16;int n;int st[N]; // 状态,记录每个位置当前的状态:0表示还没考虑,1表示选它,2表示不选它void dfs(int u) { // 终止条件 u == n + 1 也就是 u > n if (u >原创 2021-02-03 19:52:08 · 158 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-02-02 数独检查
AcWing 703. 数独检查(传送门)输入样例:335 3 4 6 7 8 9 1 26 7 2 1 9 5 3 4 81 9 8 3 4 2 5 6 78 5 9 7 6 1 4 2 34 2 6 8 5 3 7 9 17 1 3 9 2 4 8 5 69 6 1 5 3 7 2 8 42 8 7 4 1 9 6 3 53 4 5 2 8 6 1 7 931 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 91 2 3原创 2021-02-03 15:59:45 · 188 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-20 十三号星期五
AcWing 1341. 十三号星期五(传送门)思路分析:这是一个时间类计算星期几的问题,直接暴力枚举就能出来,当然很有趣的是,居然有个公式可以直接用,话不多说看代码。暴力枚举:AC代码:#include <iostream>#include <cstring>using namespace std;int n;int res[8];int days[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31原创 2021-01-25 20:01:12 · 279 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-19 找硬币
AcWing 1532. 找硬币(传送门)思路分析:这里给三种思路供参考,前两种思路有些类似,就是实现方式不同第一种:先对硬币排序,然后建立一个标记数组,时间复杂度 O(nlogn)AC代码:#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int n, m;int a[N];int flag[N];int main() { while (cin >> n原创 2021-01-25 01:29:32 · 198 阅读 · 3 评论 -
AcWing 寒假每日一题 2021-01-23 货币系统
AcWing 1371. 货币系统(传送门)思路分析:闫式DP分析法,yxc yyds!!!绿色为本题分析,其他颜色是DP整体思路没有进行空间优化前,即状态表示是二维,依然是二维空间AC代码:#include <bits/stdc++.h>#define ll long longusing namespace std;const int N = 30, M = 10010;int v, n;ll f[N][M];int main() { while原创 2021-01-25 00:29:57 · 168 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-24 阶乘
AcWing 1381. 阶乘(传送门)思路分析:这里给提供两种参考思路第一种我们进行观察,因为0只可能由2的倍数和5的倍数相乘得到,所以在进行乘法的过程中,我们将2和5的倍数给清理掉,这样就保证了不会出现0,然后我们控制其范围,每次相乘取其个位,因为个位肯定是非零元素,十位以后的数字完全没有必要保留下来,最后,我们将多处理的2或者5重新乘回去再取余即可。利用的知识有:数论中的约数、同余定理AC代码:#include <bits/stdc++.h>#define ll lon原创 2021-01-24 23:29:39 · 313 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-18 翻硬币
AcWing 1208. 翻硬币(传送门)思路分析:这个题也是个纸老虎。每次只能翻转相邻的两个,题目又保证有解,我的想法就是,两两一对进行计算,话不多说,上代码!AC代码:#include <iostream>using namespace std;string s;string w;int main() { cin >> s >> w; int res = 0; for (int i = 0; i < s.size原创 2021-01-22 22:23:57 · 199 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-21 平方矩阵 II
AcWing 754. 平方矩阵 II(传送门)思路分析:找规律,不过有几个角度可以参考下,代码量逐渐变少。第一种:直接按行、列进行模拟AC代码:#include <iostream>using namespace std;const int N = 110;int a[N][N];int main() { int n; while (cin >> n && n) { for (int i = 1; i原创 2021-01-22 21:33:37 · 138 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-16 校门外的树
AcWing 422. 校门外的树(传送门)思路分析:这个题的题目大意非常好读懂,其实就是一个区间合并的模拟题,由于数据范围比较小,所以暴力求解也ok这里提供两种思路:第一种:暴力求解不多解释了,一个一个区间搞就行,时间复杂度 O(L * M)AC代码:#include <iostream>using namespace std;const int N = 10010;int L,M;bool st[N];int main() { cin >>原创 2021-01-22 11:50:51 · 174 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-15 分巧克力
AcWing 1227. 分巧克力(传送门)思路分析:简单的整数二分,这里需要主要一下区间的变化,即 mid 是向上取整还是向下取整,两种方式都可以,但是代码不同AC代码中,用的是向上取整注意:区间的变化写法,还是check函数返回值的影响AC代码:#include <iostream>#define ll long longusing namespace std;const int N = 1e5 + 10;int h[N], w[N];int n, k;b原创 2021-01-18 16:32:15 · 235 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-14 剪绳子
AcWing 680. 剪绳子(传送门)思路分析:这是一个浮点数二分的题,主要说一下二分,什么时候可以用二分呢?将一个 最优化问题 -----> 判断问题二分的区间,以及浮点数的精读问题下面写有AC代码:#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N];int n,m;bool check(double x) { int cnt = 0; for(in原创 2021-01-18 14:44:00 · 199 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-13 回文平方
AcWing 1346. 回文平方(传送门)知识点知识点:1.数位的进制转换——短除法2.判断一个数是回文数——双指针算法AC代码知识点:1.数位的进制转换——短除法原理如下:2.判断一个数是回文数——双指针算法原理很简单,就是两个指针,一个从开始指,另一个从结尾指,然后判断就行了。AC代码#include <iostream>#include <cstring>#include <algorithm>using namespace std;原创 2021-01-14 23:01:37 · 206 阅读 · 2 评论 -
AcWing 寒假每日一题 2021-01-12 红与黑
AcWing 1113. 红与黑(传送门)思路分析:这个题可以用 bfs 宽度优先搜索 或者 dfs 深度优先搜索bfs优点:可求最短距离(第一次搜到的点,一定是最短的)更好理解,比较符合人的思维方式缺点:需要自己手动写队列dfs优点:更方便代码较短缺点:在某些OJ上存在暴栈的可能思维更像计算机思维,不好理解那么下面就先说一下 bfs 宽搜 也就是 Flood Fill算法 中文名:洪水灌溉时间复杂度 O(mn) ,m和n分别为原创 2021-01-14 18:07:56 · 219 阅读 · 0 评论 -
数论 约数 求一个数所有约数个数
AcWing 870. 约数个数由于我是我们队的数论选手,寒假刷题会略偏向于数论方面QWQ,在此记录 2021-01-12 刷题打卡~思路分析:任何正整数可以表示为 N = P1 ^ α1 * P2 ^ α2 * P3 ^ α3 * … * Pk ^ αk (P为质数)则该数N所拥有的约数个数为 (α1 +1)* (α2 +1) * (α3 +1) *… * (αk +1)AC代码:#include <bits/stdc++.h>#define ll long longus原创 2021-01-13 00:10:07 · 708 阅读 · 0 评论 -
数论 约数 试除法求一个数的所有约数并打印 附带vector的知识点
AcWing 869. 试除法求约数思路分析:本质上和试除法求质数是一样的,约数也是成对出现的,如果 p 是 n 的约数,那么 n / p 也一定是 n 的约数AC代码:#include <bits/stdc++.h>#define ll long longusing namespace std;vector<ll> get_divisors(ll n) { vector<ll> res; for(int i = 1;i <=原创 2021-01-12 21:59:36 · 222 阅读 · 0 评论 -
数论 筛质数
AcWing 868. 筛质数三种质数筛法线性筛法朴素筛法埃式筛法总结:线性筛法时间复杂度最低,建议使用线性筛法核心思想:保证了每个数一定是被它的最小质因子筛掉的,时间复杂度 O(n)AC代码:#include <bits/stdc++.h>#define ll long longusing namespace std;const int N = 1e6 + 10;int primes[N];bool st[N];void get_primes(ll n) {原创 2021-01-12 13:29:21 · 223 阅读 · 0 评论 -
数论 质因数分解 试除法
AcWing 867. 分解质因数由于我是我们队的数论选手,寒假刷题会略偏向于数论方面QWQ,在此记录 2021-01-11 刷题打卡~AC代码:#include <bits/stdc++.h>using namespace std;void divide(int n) { for (int i = 2; i <= n / i; i++) { if(n % i == 0) { // i 一定是质数 int s = 0;原创 2021-01-11 23:30:29 · 978 阅读 · 0 评论 -
数论 质数 试除法判断质数
AcWing 866. 试除法判定质数由于我是我们队的数论选手,寒假刷题会略偏向于数论方面QWQ,在此记录 2021-01-11 刷题打卡~AC代码:#include <bits/stdc++.h>#define ll long longusing namespace std;bool isPrime(int n) { if( n < 2) return false; for(int i = 2;i<= n / i;i++)原创 2021-01-11 22:44:37 · 879 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-11 蛇形矩阵
AcWing 756. 蛇形矩阵思路分析:没啥思路QWQ(思路写在代码的注释里了)一个模拟题罢了,不过是有学到新东西的~AC代码:#include <bits/stdc++.h>#define ll long longusing namespace std;const int N = 110;int q[N][N];int main() { int n, m; while (~scanf("%d%d", &n, &m)) {原创 2021-01-11 22:01:43 · 169 阅读 · 0 评论 -
AcWing 寒假每日一题 2021-01-10 数字三角形
AcWing 898. 数字三角形应该是一道很经典的简单DP了,之前东师ACM新生赛也有这个题,+7学姐的数塔这次听了yxc老师讲了一下DP的思路,用代码实现了一下思路分析:DP的话,应该是有状态表示和状态计算两个东西,下面的图片简单列举了一下DP的思路,红色字体代表本题的思路AC代码:#include <bits/stdc++.h>#define ll long longconst int N = 520;using namespace std;int w[N][N],原创 2021-01-10 22:43:42 · 306 阅读 · 2 评论 -
AcWing 寒假每日一题 2021-01-09 货仓选址
AcWing 104. 货仓选址思路分析:一个比较经典的题目叭,也是放在数轴上处理问题,刚好和昨天做的那个绝对值不等式有点像,这个题的关键也是绝对值不等式。结论是:如果N是奇数的话,货仓应该建在中位数的位置,如果N是偶数的话,货仓应该建在中间两个数的任意一个位置。说一下结论如何来的,首先假设只有两个商店,那么货仓的位置建在两个商店之间则最小,拓展到N个商店,收尾组队,即可得出结论。拓展分析:1.一维拓展到二维,算法思想:三分 题目链接 AcWing 3167. 星星还是树2.拓展到d维,原创 2021-01-10 18:36:46 · 290 阅读 · 0 评论