随笔分类 - acwing打卡
摘要:(双指针算法优化)思路: 暴力解法: for(int i = 0; i < n; i ++) for(int j = 0; j <= i; j ++) check(i , j); **算法优化:**找到某种性质,尤其注意解题过程中存在的单调性 for(int i = 0, j = 0; i < n;
阅读全文
摘要:高精度加法 a, b均为正整数 #include <iostream> using namespace std; const int N = 100010; int A[N], B[N], C[N]; int Add(int a[], int b[], int c[], int cnt) { int
阅读全文
摘要:二分思路 #include<iostream> #include<iomanip> using namespace std; double n,l,r,mid; bool flag; double q(double a){return a*a*a;} int main(){ cin>>n; l=-1
阅读全文
摘要:逆序对定义 对于数列的的第i个和第j个元素,如果满足i < j 且 a[i] > a[j],则其为一个逆序对。 分析 若将序列从中间划分,可以分为3类: 某逆序对的两个元素都在左边 某逆序对的两个元素都在右边 某逆序对的两个元素一个在左,一个在右 算法框架 递归计算左边逆序对数量merge_sort
阅读全文
摘要:给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1≤n≤7 输入样例: 3 输出样例: 1 2 3 1 3 2 2 1 3 2 3 1
阅读全文
摘要:关键代码: void head_swap(int a, int b){ swap(ph[hp[a]], ph[hp[b]]); swap(hp[a], hp[b]); swap(h[a], h[b]); } 思想: 如何解决插入的第 k 个数是什么?在链表中,idx 取 第几个插入的数,idx 与
阅读全文
摘要:#include #include using namespace std; typedef unsigned long long ULL; char str[N]; //存放字符串 int h[N], p[N]; //h[]存放前缀和,p[]存放倍数 ULL get(int l, int r){
阅读全文
摘要:初始化: n个下表对应n个集合,根节点的特征是父节点就是其本身。 for(int i = 1; i ⇐ n; i++) p[i] = i; M操作:如果两个元素在同一个集合中,什么也不做,否则将两个集合合并; Q操作:两个集合在同一个集合回复“Yes”,否则回复“No”; 核心思想:(1)两个集合合
阅读全文