- 博客(81)
- 收藏
- 关注
原创 寒假训练营 第一节 时空复杂度分析
时间复杂度:程序运行会消耗多少时间。在此,为了方便讨论,我们假定每一个语句消耗的时间一样,视为一个时间单元。
2022-12-20 12:14:43
981
1
原创 Codeforces刷题记录(tag: chinese remainder theorem 873 ~ 1073)
结论:一个数是3的倍数当且仅当这个数各位上的数字加起来是3的倍数。结论:一个数是3的倍数当且仅当这个数各位上的数字加起来是3的倍数。结论:一个数是3的倍数当且仅当这个数各位上的数字加起来是3的倍数。要想是一个数的倍数,可以分解,比如本题。0是一个偶数。
2022-08-20 14:59:38
308
原创 Codeforces刷题记录(tag: combinatorics 873 ~ 1073)
当求一个问题的方案数的时,可以从另外一个角度来看待问题,将问题进行转化,比如此题:要求总和为s-1的子序列的个数,直接求不好求,所以我们换个角度看待这个问题,满足要求的子序列会删去一个1和若干个0(当然也可以一个0都不删),因此问题转化为求恰好删去一个1且包含0个或若干个0的子序列。故答案为2cnt0∗cnt12cnt0∗cnt1。1.题目名称: B. Customising the Track 1543B。
2022-08-20 12:00:35
414
原创 Codeforces Round #814 (Div. 2)
此类,走棋盘走到不能走位置的问题,多从奇偶性的角度考虑。对于此类,将1~n匹配分数对需要找规律的问题,可以多从奇偶性考虑。每次考虑对余数进行分类讨论时,可以参照本题的循环方式。每一个偶数都至少提供一个因子2。对于需要预处理的模拟题,需要考虑,我们要求得答案需要维护哪些信息。for循环赋为0 比 memset快很多。斐波那契数列最后一项的值fn=fn−1+fn−3+fn−5+...加到不能加隔一项加一次。...
2022-08-18 10:41:39
336
原创 *AcWing 1315. 网格(卡特兰数 + 阶乘分解质因数求组合数 + 高精度)
如何求组合数的相关总结本题的高精度写法非常锻炼写法,需要反复推敲。
2022-08-16 23:01:06
135
原创 AcWing 1316. 有趣的数列(卡特兰数)
当求组合数,数据规模较大时(比如大于等于5000时),需要用质因数分解的方法求解组合数。1.若需要mod一个数。则直接预处理质数,阶乘分解质因数即可。2.若不mod一个数。则说明肯定会爆longlong,还需将相关操作改成高精度算法。...
2022-08-16 22:41:41
122
原创 *AcWing 1312. 序列统计(非单调序列映射为单调序列+卢卡斯定理+隔板法)
巧妙运用映射的方式,可以将非单调递增的序列映射为单调上升的序列。形如这样的组合累加式,都可以用这种转换的方式,将累加式转成闭合式。
2022-08-16 15:37:07
238
原创 AcWing 1310. 数三角形 (容斥原理 + 分类讨论)
题型:给定n * m 的矩阵,求三角形的个数。对于一个底边长为i,高为j的直角三角形,其斜边除开两个端点还含有gcd(i,j)-1个整数格点。
2022-08-15 23:38:00
242
原创 AcWing 1308. 方程的解(高精度+递推+隔板法)
高精度数组的用法://多开一维用来存储位置 //高精度加法函数 c = a + b void add(int c [ M ] , int a [ M ] , int b [ M ]) {//进位 //枚举每一位 for(int i = 0;i < M;i ++) {//当前这一位的答案 t = t % 10;//得到进位 } } //输出 int t = n - 1;//得到最高位 while(!......
2022-08-15 22:09:48
165
原创 AcWing 1309. 车的放置(预处理阶乘+组合数+排列数)
对于一个规则的图形,若要放置n个物品,可以直接求Can∗PbnCan∗Pbn。对于一个不规则的图形来说,需要将其化为规则的图形在计算,比如本题。
2022-08-15 17:39:07
107
原创 AcWing 1303. 斐波那契前 n 项和
求斐波那契数列的若干方法:https://www.acwing.com/blog/content/25/
2022-08-14 18:54:53
120
原创 *AcWing 202. 最幸运的数字(同余+欧拉函数+龟速乘快速幂+构造)
gcd(a,b)=d。gcd(a,b)=d。因此,上述思路的9L∣8(10x−1)9L∣8(10x−1)可转化为9L8∣(10x−1)89L∣(10x−1)结论:给定任意一个正整数a,x,c都有axa^xax≡1(modc)≡1。
2022-08-12 15:25:16
148
原创 AcWing 222. 青蛙的约会
ax+by=dax+by=d只能求出来最大公约数和最大公约数的倍数。要求正整数解的情况下,记得取abs,因为不一定为正数。exgcd求出来的是d,因此一般要扩大答案。
2022-08-12 10:19:54
77
原创 AcWing 203. 同余方程
扩展欧几里得证明参考:https://www.acwing.com/solution/content/25756/
2022-08-11 22:10:58
94
原创 AcWing 201. 可见的点
思路参考:https://www.acwing.com/problem/content/203/四.总结线性筛求欧拉函数的证明:
2022-08-10 18:38:34
86
原创 AcWing 200. Hankson的趣味题
本题最为核心的地方,在于时间复杂度的分析。当我们要求一个数n的约数时:暴力方法:直接试除法O(N)O(\sqrt N)O(N)优化方法:用1到N1 到\sqrt N1到N的所有质数,去试除。时间复杂度可以降到nlnnlnnn。2∗109约数个数最多的有1536个2 * 10^9约数个数最多的有1536个2∗109约数个数最多的有1536个231−1约数个数最多有1600个。...
2022-08-10 17:31:03
141
原创 第五章 C++与STL入门 例题
下面三种函数的作用区间都是左闭右开。sort()函数默认升序,start是要排序数组的起始地址,end是数组结束地址的下一位,cmp用于规定排序的方法,可不填,默认升序。lower_bound()函数:lower_bound(begin,end,num)的含义是从数组的begin位置到end位置-1位置二分查找一个大于或等于num的数字,找到则返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,可以找到数字在数组中的下标。upper_bound()函数。...
2022-08-04 22:27:07
870
原创 AcWing 1290. 越狱
直接考虑不好做的情况下可以多考虑一下补集的思想。在数论题目中经常会涉及取模操作,在计算的过程中可能会出现取模为负数的情况,所以可以先加一个mod再和%mod。https。
2022-07-31 14:48:10
77
原创 AcWing 1289. 序列的第k个数
给出数列前三项a,b,c。若为等差数列当且仅当a∗c=2∗ba∗c=2∗b若为等比数列当且仅当a∗c=b2a∗c=b2。
2022-07-31 11:30:09
187
原创 AcWing 196. 质数距离
1.一般筛质数都是求从1~N中的所有质数。如果要求某一个区间[L,R]的所有质数的时候,可以巧妙运用上面提到的性质1,进行求解。1.1如果数据范围是int范围内的话,N\sqrtNN大约等于50000。1.2先求出1~N\sqrtNN中的所有质数。然后枚举每一个质数pip_ipi筛掉[L,R]之间的pip_ipi的倍数。然后扫一遍[L,R]即可得到答案。例题P1835素数密度2.分数的上取整转换下取整(要求大于等于L的p的倍数的最小值公式)⌈L。...
2022-07-30 17:11:56
158
原创 AcWing 1293. 夏洛克和他的女朋友
根据题意,把具有题目这种关系看做是一条边,可以发现,这条边必然是一个质数连向一个合数,保证这条边的两端颜色不同即可,因此,所有珠宝之间的关系可以看成很多条边的图。因为题目的限制只存在与一个合数和它的质因子,所以质数之间和合数之间是没有限制条件的,可以看成一个二分图所以最多只需要两种颜色即可。2.依次枚举每一个珠宝的价值,如果当前这个珠宝的价格是质数则染成1号色,否则为2号色。1.如果珠宝数量小于3,则珠宝的价格全部为质数,所以只需要1种颜色即可。...
2022-07-30 15:59:32
174
原创 0x15 字符串
一.字符串的基本知识1.字符串: 1.1 S:无特殊说明,字符串仅由26个小写字母'a'~'z'构成,并用大写字母表示一个字符串。 1.2 |S|:表示一个字符串的长度。 1.3 S[i]:表示字符串S的第i个位置的字母,下标从1开始。2.子串: 2.1 S[l,r]:表示字符串S从l到r个字母顺次连接而成的新的字符串。 2.2 PrefixS[i]:表示字符串S长度为i的前缀,PrefixS[i]=S[1,i]; 2.3 SuffixS[i]:表示字符串S长度为i的后缀,SuffixS[
2022-02-14 08:23:41
782
原创 0x14 hash
一.hash的种类hash分为普通hash和字符串hash。其中普通hash的存储结构(处理冲突)有两种:拉链法和开放寻址法。冲突:两个不同的数通过hash函数映射到相同的值。PS:离散化是一种特殊的hash(离散化需要保序)。二.普通hash(hash函数一般为x%mod直接取余就可)hash函数中,mod(表头数组长度一般取成一个质数,这样可以减少冲突的概率。)拉链法开一个序列做链接表表头。例题:AcWing 840. 模拟散列表code:#include<iost
2022-02-11 21:30:31
258
原创 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
197
原创 0x02. 基本算法 — 归并排序
算法分析:时间复杂度O(nlogn)O(nlogn)O(nlogn)思想:归并排序是一种基于分治的思想。实现步骤:给定一个待排序数组q[N],其中L为左端点,R为右端点。1.确定分界点:int mid = l + r >> 1;2.递归处理左右区间:merge_sort(q, l,mid) , merge_sort(q,mid + 1,r);3.调整区间:合二为一code:#include<iostream>using namespace std;const
2022-02-05 18:39:21
878
原创 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
226
原创 0x01. 基本算法 — 快速排序
算法分析:时间复杂度:nlognnlog_nnlogn思想:快速排序是一种基于分治的思想。实现步骤:给定一个待排列的数组q[N],其中L为左端点,R为右端点。1. 确定分界点并定义i,j指针:可选q[l]或者q[r]或者q[mid]或者任意值作为分界点。2. 调整区间:调整区间的目的是为了让分界点的左边的值都小于等于分界点,让分界点右边的值都大于等于分界点。3.递归处理左右两段:分别递归处理左右两个区间即可。code:#include<cstdio>#include<
2022-02-04 18:30:15
879
原创 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
558
原创 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
268
原创 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
114
原创 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
166
原创 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
110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人