![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
基础数论
剁diodio
这个作者很懒,什么都没留下…
展开
-
第15届台州学院校赛题解
简要题解原创 2022-11-13 12:37:54 · 1093 阅读 · 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 · 1540 阅读 · 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 · 485 阅读 · 1 评论 -
数字染色 容斥原理
原题链接:https://ac.nowcoder.com/acm/contest/20278/I这道题本来是周常训练时碰到的。听周队说是容斥原理,想以后学了数学在做,碰巧刚刚学了容斥,就来把这题给A了。(听说用莫比乌斯反演也可以做下回再补吧)题目:输出样例1:42 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 · 195 阅读 · 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 · 100 阅读 · 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 · 93 阅读 · 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 · 304 阅读 · 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 · 124 阅读 · 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 · 114 阅读 · 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 · 98 阅读 · 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 · 112 阅读 · 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 · 93 阅读 · 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 · 230 阅读 · 0 评论