数论
基础数论
剁diodio
这个作者很懒,什么都没留下…
展开
-
第15届台州学院校赛题解
简要题解原创 2022-11-13 12:37:54 · 1054 阅读 · 2 评论 -
浅谈st表
st表的概念 st表可以用于处理静态(不修改)的rmq问题(区间最值问题)O(logn)预处理 ,O(1)查询。是一种操作简单的数据结构。 st表的实现 st表通过倍增,区间dp来实现。 st表预处理: void init() { for(int i=1;i<=lg[n];i++) { for(int j=1;j+(1<<i)-1<=n;j++) { st[j][i]=max(st[j][i-1],st[j+(1<原创 2022-03-15 11:27:34 · 1515 阅读 · 0 评论 -
(AtCoder Beginner Contest 232) E - Rook Path dp+组合数
题目大意: 给定一个 h*w(0<w,h<1e9) 的棋盘,现在有一个象棋棋子“车”在(x1,y1)现在你能执行k步走到( x2 , y2 ),请问有几种走法。 题解 用dp来处理行和列, 一种是在当前行,另一种是不在当前行,即分别为dp[1],dp[0]; 那么如果我在i步内能到达即是dp[1][i],不能到就是dp[0][i] 这样就可以写出转移方程: dp[i][1]=dp[i-1][0];//注意dp[i][1]不也可以由dp[i-1][1]转移得到,因为移动0步不算一次操作。 dp[i原创 2021-12-20 21:16:37 · 453 阅读 · 1 评论 -
数字染色 容斥原理
原题链接: https://ac.nowcoder.com/acm/contest/20278/I 这道题本来是周常训练时碰到的。听周队说是容斥原理,想以后学了数学在做,碰巧刚刚学了容斥,就来把这题给A了。(听说用莫比乌斯反演也可以做下回再补吧) 题目: 输出样例1: 4 2 3 6 2 输出样例1: 9 输出说明: 共有 9 个方案:{1},{2},{3},{4},{1,3},{2,3},{3,4},{1,4},{1,3,4}。其中以上为所选数的下标。 #include<bits/stdc原创 2021-10-29 12:03:13 · 192 阅读 · 0 评论 -
TZOJ 2644 青蛙的约会 扩展欧几里得
题解: 代码: #include<algorithm> #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long LL; LL exgcd(LL a,LL b,LL &x,LL &y) { if(b==0) { x=1;y=0; return a; } .原创 2021-09-26 14:27:43 · 95 阅读 · 1 评论 -
高斯消元模板 TZOJ 5817: 球形空间产生器
关于高斯消元: 时间复杂度O(n^3) 利用增广矩阵可以求出线性方程。 代码: #include<bits/stdc++.h> using namespace std; const int N = 105; const double eps = 1e-6; double a[N][N]; int n; int gauss() { int r,c; for(r=1,c=1;c<=n;c++) { int t=r; for(int i=r原创 2021-09-16 16:21:04 · 88 阅读 · 1 评论 -
TZOJ 6619 网格 卡特兰数+高精度
关于卡特兰数: 定义:对于一个由n个1,和0组成的序列,并且满足每一位之前的0的个数必定大于等于1的个数。这些序列的总数我们称之为卡特兰数。 建模 (图片来源于https://www.acwing.com/solution/content/46130/) 我们将0表示为向左走,1表示为向右走。 通过图中我们可以发现 终点(n,n)一共有C(2n,n)中。 而违规路线经过红线反转必然经过点(n-1,n+1),那么违规路线的总数即为C(2n,n-1),那么合法的路线就为C(2n,n)-C(2n,n-1)。原创 2021-09-15 15:09:11 · 285 阅读 · 1 评论 -
TZOJ 车的放置 dp递推+组合数
题目: 题解: (一): dp递推: 1.dp[i][j]的状态表示: 第i行一共有j个棋子的数目; 2.转移方程就为: dp[i][j]=dp[i-1][j-1]*(k-j+1)+dp[i-1][j]。 前一排j-1的个数乘以这一排的方案数(k-j+1)再加上前一层j的个数。 注意: 一般要从右往左遍历比较好。 #include<bits/stdc++.h> using namespace std; const int mod = 100003; int f[2005][2005]; in原创 2021-09-14 15:06:04 · 122 阅读 · 0 评论 -
TZOJ 6612 方程的解 组合数+快速幂+递推+高精度
题目描述: 题解: 1.利用快速幂取模将g(x)给求出来。 2.分析a1,a2,a3…ak。发现可以通过隔板法做: 一、 我们先建立以下模型: 当k=3,g(x)=7时。 就是在以上七个球之间添加两块板。 那所有的情况就是:C(k−1,n−1)。 答案最大可以达到:C(100,1000)。 因为没有取模所以需要高精度加法和递推式:C(r,n) = C(r-1,n-1)+C(r,n-1)。 代码: #include<bits/stdc++.h> using namespace std; typ原创 2021-09-13 21:35:14 · 104 阅读 · 0 评论 -
Codeforces 1366D - Two Divisors 素数筛+gcd的构造
题目: 题意: 如果n的两个因数d1,d2,能构造gcd(d1+d2,n)=1。就输出d1和d2。 如果不行就输出两个-1。 题解: 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e7+5; int f[N],p[N],ans; int a[N/10],b[N/10]; void init() { for(int i=2;i<N;i++) { if(!f[i原创 2021-09-08 21:05:00 · 92 阅读 · 0 评论 -
TZOJ 5160: Yifan and LCM bitset筛素数+初等数论
题目描述: 题意: 求lcm(1,2,3…n)。 题解: 以上结论其实挺好证明得到。 因为一个数不是一个质数的n次方那么将这个数分解质因数,他的素因子一定包含于前面的lcm。 代码: 因为n的数特别大。普通的欧拉筛素数没法满足,所以就需要用bitset来储存bool数组。 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e8+5; const int M=6e6; bitset&l原创 2021-09-07 20:46:22 · 106 阅读 · 0 评论 -
TZOJ 7034: 竹取飞翔 ~ Lunatic Princess 并查集+数学。
题目: 题解: 这道题比赛的时候没看,主要还是因为对集合求所有子集和不是很了解。 看了题解才知道 sum=(2^n-1)*(集合中数的和).。 然后就很简单了,用并查集维护祖孙节点就好了。 唯一的坑点就是原始的数据可能是负数,不能直接取模需要加上mod后取模。 代码: #include<iostream> #include<cstdio> using namespace std; typedef long long LL; const int mod=1e9+7; const in原创 2021-09-07 13:56:41 · 86 阅读 · 0 评论 -
TZOJ 5463: 学习之数论 欧拉筛+分解质因数
题目: 题解: 第一眼看到后就想到了分解质因数。 先把正整数K给分解质因数了。然后利用约数和他的次数,求出最大的n 但这样还不够(可能是crq在折腾负载平衡的问题),算法t了。于是我在求质因数的时候用了欧拉筛把复杂度降了下来,最后ac代码也只跑了287ms。难道欧拉分解质因数这么快的吗? 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL,int>pii; co原创 2021-09-07 13:41:56 · 217 阅读 · 0 评论