数学题
2020100XWH
这个作者很懒,什么都没留下…
展开
-
没那么大的组合数
组合数原创 2022-07-10 17:03:39 · 161 阅读 · 1 评论 -
1e11内素数总数
大范围内素数个数原创 2022-07-09 19:20:44 · 196 阅读 · 0 评论 -
线性递推转化为矩阵快速幂
方程的根通过移项可以得到低次向高次的线性递推,通过变形目标式得到目标式的线性递推,最后用矩阵乘法快速幂处理#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod =998244353;int nn=3;const int maxn=10;struct mat{ ll m[maxn][maxn]; mat(){ memset(m,0,sizeof(m原创 2022-05-05 20:50:21 · 248 阅读 · 0 评论 -
整理排列呀
对于任意一个乱序排列,可以用至多n-1个对换操作,完成排序按顺序放入目标。原创 2022-04-27 16:29:08 · 96 阅读 · 0 评论 -
数论求a^b(a,b为1e12级别)的因子之和
1.首先考虑将a质因子分解,筛出1e6内的a的质因子及幂次,若a还有质因子(未被筛成1的话)则有一个大于1e6的大质因子(至多一个)(补上即找到所有质因子)2.将b放入幂指数3.考虑一个生成函数a^b的因子之和=(p1^0+p1^1.....+p1^k1)(p2^0+.....+p2^k2).....(pm^0+...pm^km)这个生成函数的每一项都是一个不同的因子(此处p为a的质因子)4.最后就是处理一系列等比数列的和,方法一是等比求和,但由于mod过小 有可能出现q为1的情况 ,.原创 2022-04-22 21:46:12 · 249 阅读 · 0 评论 -
dp优化(
[CSP-S2019] Emiya 家今天的饭 - 洛谷1.首先通过问题取反,将找都小于k/2的情况,转化为找大于k/2的情况,而这种最多有一个大于所有的一半,而每一种菜不一样,考虑枚举每一种菜2.因为可以不取,所以多的与剩下的各有自由度,所以考虑三维dp,dp[i][j][k],每一轮dp在选定的最长列为mj,所以dp[i][j][k]=dp[i-1][j-1][k]*(a[i][mj])+dp[i-1][j][k-1]*(sum[i]-a[i][mj])+dp[i-1][j][k],j为最.原创 2022-03-31 16:57:20 · 122 阅读 · 0 评论 -
完全背包+容斥
[HAOI2008]硬币购物 - 洛谷给定4⃣️种硬币价值,多次提问给定各个硬币个数,和商品价值,求付款方式数1.完全背包o(值域)计算不限制硬币个数在值域范围内的付款种数2.状压容斥去重#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#include<algorithm>using.原创 2022-03-30 17:22:58 · 137 阅读 · 0 评论 -
判断所有范围n,m范围内的组合数是否能被k整除,多次询问
1.对k取模,组合数到20爆int,30爆ll,判断整除问题可以用取模简化2.一些累计个数问题且有一维或多维线性累积关系时,考虑用数组递推dp处理[NOIP2016 提高组] 组合数问题 - 洛谷#include<bits/stdc++.h>using namespace std;typedef long long ll;const int nn=2000;int c[nn+5][nn+5];int ans[nn+5][nn+5];int main (){..原创 2022-03-25 17:25:08 · 273 阅读 · 0 评论 -
分类根号优化复杂度
1.对于根号n范围内的区间,用dp维护区间最小绝对值差,由于数据量大,所以用滚动数组的方式维护当前确定起点的dp,复杂度为o(根号n*n)2.对于大于根号n范围的区间,因为最大最小绝对值差一定小于m/根号n,所以也是根号n,通过在确定右端点下枚举差值小于等于j最近的位置,此时再往右移动一个位置就是至少i+1来更新ans(遍历所有右端点和可能的最小绝对差)复杂度也为(根号n*n)。这题基础算法+观察数值范围特征,分出根号n部分复杂度有优化的可能#include<bits/stdc++..原创 2022-02-27 11:17:49 · 309 阅读 · 0 评论 -
分段处理复杂度
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=3e5+7;ll n,w[N],p,a[N],b;ll ans[N];vector<int>v[N];ll dp[N];int main(){ cin>>n; for(int i=1;i<=n;++i) { cin>>w[i]; } .原创 2022-02-26 15:44:53 · 139 阅读 · 0 评论 -
gcd数组 值域法
因为注意到值域只有1e6而gcd只能有倍数取出所以对于每一个数探究是否能出现在数组中,方法一直接出现,二从其倍数gcd出现,而大的数字出现会可能影响小的gcd所以逆序取。Problem - D - Codeforces#include<bits/stdc++.h>using namespace std;int n,t,x,ans,i,j,temp;bool vis[1000005];int gcd(int a,int b){ if(b==0) re原创 2022-02-18 00:55:48 · 488 阅读 · 0 评论 -
结论性,不按题目描述思路推进
Problem - B - Codeforces由题设推知后者必选四角,所以每次涂色剩下的最佳就是排序(转化),只需记录每个位置与四角最大距离的排序即可原创 2022-02-17 14:02:52 · 46 阅读 · 0 评论 -
小值域指数级选择空间换时间
Problem - D - Codeforces1.数学公式化简,一些非对称折半类问题,可以通过扩大范围为全部处理(尤其连加号)2.n个二选一指数级求和最值,可以用bitset记录可能有的情况,下标作值#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,a[105],b[105],t;ll ans=0,sum=0,s;bitset<105*105>bs;int mai.原创 2022-02-14 17:56:09 · 309 阅读 · 0 评论 -
生成1到n随机数
#include<iostream>#include<ctime>using namespace std;int main(){ int n; cin>>n; stand((int)time(0)); int num=1+rand()%n; cout<<num<<endl; return 0;}原创 2022-02-06 11:52:44 · 774 阅读 · 0 评论 -
【无标题】
审题,结合具体例子分析情况原创 2022-01-24 19:56:04 · 143 阅读 · 0 评论 -
抽象计数思想
Problem - I - Codeforces这是采取抽象的计数思想,若产生差值变化则一定有一个最大或最小值产生,做大小方向考虑ans*2,若差值未变化,则已经有的间隔中挑选一个(用cnt记录)即乘cnt,若cnt小于1则直接返回0,这里就避免了对于每个数的具体考虑,直接从选择数上考虑总的可能数。注意编译语言(64有时有问题)注意取模过程中的减运算,防止减到负,可以考虑先加个mod#include<bits/stdc++.h>using namespace std;..原创 2021-10-24 22:44:10 · 67 阅读 · 0 评论 -
数学知识之求极限
出现超越函数比幂函数的求极限情况可以将分子的超越函数通过泰勒展开展开至分母那一阶,剩余的高阶无穷小在极限下直接为0,其余的即可讨论约分有时要明确目标,解决当前方法的目标,来调整方法基础知识重要!额外收获:当求任意组合和的时候,可以考虑分部分一串一串求...原创 2021-09-25 21:18:27 · 123 阅读 · 0 评论