自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 收藏
  • 关注

原创 没那么大的组合数

组合数

2022-07-10 17:03:39 132 1

原创 https://ac.nowcoder.com/acm/problem/19985

向量组成

2022-07-10 14:20:58 229

原创 1e11内素数总数

大范围内素数个数

2022-07-09 19:20:44 172

原创 换根呀呀啊呀

登录—专业IT笔试面试备考平台_牛客网#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+5000;struct edge{ ll to,next,w;}e[N*2];ll head[N],tot,flow[N],deg[N],sum,ans[N];void addedge(ll u,ll v,ll z){ e[tot].to=v; e[t

2022-05-31 16:02:30 60

原创 线性递推转化为矩阵快速幂

方程的根通过移项可以得到低次向高次的线性递推,通过变形目标式得到目标式的线性递推,最后用矩阵乘法快速幂处理#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 241

原创 整理排列呀

对于任意一个乱序排列,可以用至多n-1个对换操作,完成排序按顺序放入目标。

2022-04-27 16:29:08 91

原创 数据溢出考虑

1.乘法产生:qmul2.qpow产生(并且qmul处理不了,采取_int128(max)#include<bits/stdc++.h>#define int __int128using namespace std;int read(){ int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=f*-1;ch=getchar();}while(ch>='0'&&ch&l.

2022-04-26 11:21:42 199

原创 搜索问题呀

搜索复杂度估计:状态数*状态转移(因为会记录下已经搜索过的状态,防止重复搜索)输出路径的时候需要递归输出,这里将这些所有信息包含一个结构体中方便输出#include<bits/stdc++.h>using namespace std;struct one{ int now; int last; int pos; int way; int step;};one a[1<<16];bool vis[1<<1..

2022-04-26 11:15:00 81

原创 数学递推式(参入数论)

问题:在1e9内所有素数中放回抽取,直至累乘积为目标值,求期望抽取次数递推公式(有回退性):记f[x]表示目标值为x时的期望次数f[x]=1+(( f[ x/prime[i] ]*p[i] )+f[x]*pp )得到x的期望等于这次没抽到x素因子的概率乘期望+抽到概率*剩余期望+1(这一次的递推)这里pp为定值,移项化简得到递推,递推特征是子状态的素因子一定在x中,记录所有素因子,然后每次枚举其素因子可重复的个数即可,这种没那么规整的递推多使用记忆化搜索,用个数组记录即可

2022-04-26 11:09:02 92

原创 依附背包呀

物品间有主次品的依附关系,这里就将依附关系的物品讨论成几种情况,能拿几种分别做成一个新的物品,这几个新物品相当于是互斥关系 最多选一个 最后就当分组背包处理这里由于只有一层依附关系,若有多层就从最底层出发分类处理。[NOIP2006 提高组] 金明的预算方案 - 洛谷#include<bits/stdc++.h>using namespace std;int dp[40000];vector <int> cc[40000];int main (){ ..

2022-04-23 20:24:12 123

原创 数论求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 231

原创 分组背包呀

所有物品分成k组,组内互斥对组01背包,最后一维枚举组中哪个#include<bits/stdc++.h>using namespace std;int dp[1005];struct one{ int m,w;};vector <one> v[1005];int main(){ int n,m; cin>>m>>n; int a,b,c; for(int i=1;i<=n;++i) .

2022-04-22 17:55:39 135

原创 二维01背包

直接二维倒序枚举#include<bits/stdc++.h>using namespace std;int dp[205][205];int main(){ int n,m,t; cin>>n>>m>>t; int mm[105],tt[105]; for(int i=1;i<=n;++i) { cin>>mm[i]>>tt[i]; } for

2022-04-22 17:16:28 122

原创 混合背包呀

1.滚动数组dp空间优化2.对不同背包讨论直接分类处理01: 倒序枚举完全:正序枚举多重背包:二进制分组3.!.注意输入别用自加 分开写!#include<bits/stdc++.h>using namespace std;int t1,m1,t2,m2;int dp[100006];int w[2000005],st[2000006],cc[2000006];int main(){ scanf("%d:%d %d:%d",&t1,&am.

2022-04-22 13:06:13 69

原创 抽象dpp

给定一个数列,求其中所有等差数列个数(包含1、2个元素)1.子状态:从左往右枚举,每次以新出现元素为结尾新增的等差数列个数2.状态:dp[i][j]表示以第i个数为结尾,公差为j的数列的个数(元素个数大于等于2)(找一个角度来划分目标)3.递推公式:dp[i][j]+=(dp[k][j]+1)(k=1.2.....i-1) (这里的+1是关键的地方,体现在若前面的数没有再前面的数则+1(做两个元素的等差数列)若有 则表示额外多了一个元素多的个数,而个数本身是由两个两个叠加起来的。这里计数注意只.

2022-04-22 09:43:07 71

原创 dp 优化

「SWTR-03」Golden Sword - 洛谷1.确定子状态:选完了前i个,当前剩下j个2.dp柿子:dp[i][j]表示如上含义3.递推公式:dp[i][j]=maxdp[i-1][j-1],j..j+s-1;4.去重(无)这里对区间最值做一个单调队列的优化(从后往前的滑动区间)先理清写出思路!好好写代码#include<iostream>#include<cstring>#include<vector>#inclu.

2022-04-21 12:19:36 106

原创 树形dp基础

1.给定中序遍历1,2,3....n,作用:越小的号码放在“越左子树”,对树的形状并没有什么限制。2.给定计算方式为左子树分数*右子树分数+根节点分数,所以对一个已知确定的树只需要摆定他的根就可以确定其得分 对此可以递归子树加枚举处理,而如何确定一个数(根可不定)由于中序遍历给定,所以对于任一个区间[i,j]可以达到需要,对于每个区间递归枚举根即可(这里采用记忆化搜索)#include<iostream>#include<cstring>#include<ve.

2022-04-21 00:04:19 947

原创 经典字符dp

给三种操作,删任意位置字符,添任意字符于任意位置,改任意字符为任意字符,求将串a变为串b的最小操作数dp四部曲:1.定义子状态:进行多次操作后将a变成b的所需操作数2.定义状态:dp[i][j]表示将串a的前i个字符转化为串b的前b个字符(提炼出的本质问题)3.递推公式:对于前两个操作即转化为dp[i-1][j] dp[i][j-1]取较小的再加一分别表示删去最后a最后一个和添b最后一个的子问题,对于第三个操作要讨论a[i-1]是否等于b[j-1]若等于再和dp[i-1][j-1]取..

2022-04-20 20:42:29 1019

原创 最大不下降序列

1.求不下降就把上升序列中的lowerbound改成upperbound 即可(模版注意下标)2.最多需要多少,每次lowerbound贪心即可(若未找到会返回末尾位置,建议数组0开始)变量该局部局部全局全局 方便不易错 影响不大[NOIP1999 普及组] 导弹拦截 - 洛谷#include<iostream>#include<cstring>#include<vector>#include<cstring>#include&l

2022-04-19 21:56:14 94

原创 排列中的最长公共子序列nlogn

1.首先通过离散化将第一个序列的顺序映射为升序排列,并依此离散函数将第二个函数转化,从而将求公共子序列问题转化为求一个最长升序子序列,通过贪心二分(lowerbound)可直接处理2.注意最后得到的数组不是最长升序子序列本身,但长度是。#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#include<a.

2022-04-19 21:15:46 246

原创 记忆化搜索

dp动规思想结合搜索,再搜索的过程中对搜索到过的最优子结构进行记录,当下次再递归搜索到时直接访问停止递归,以防止重复的拓扑搜索。记忆化搜索是对dp的扩充,当dp情况多样难以枚举时,可以考虑结合搜索处理[SHOI2002]滑雪 - 洛谷#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#include<

2022-04-19 17:06:52 100

原创 无限转冲,连续的力量

kotori的设备 - 洛谷这里一个充能点问能维护n个费能点多久,由于这里充能点的转变不需要浪费任何时间,所以,能维护一堆机器工作t时的充要条件是 :能提供的电量大于等于消耗电量,这里把电量看作对象,一个机器用掉多冲的电量的时间完全可以用来充满另一个,总的电量是一定的,只要将电量在极小的时间内平分就一定能持续不用管b【i】#include<iostream>#include<cstring>#include<vector>#include<..

2022-04-14 12:55:01 54

原创 蓝桥杯 cr

#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;typedef pair<int,int> pii;#define aa first #define bb secondconst int maxx=4e7+8;const int nn=100005;cha.

2022-04-09 15:18:40 110

原创 转换等价处理

[NOIP2015 提高组] 跳石头 - 洛谷最后一颗不能动的石头让我怀疑二分贪心策略的正确性,但仍是正确的,因为出现这种情况,去掉当下的石头可以解决,若不能去掉,则一定完不成,因为贪心一定是最小花费的最优情况,所以对与check仍旧等价(因为只差一个,所以既然不存在最优,这个就一定能排到最优)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inmax=40000008;c.

2022-04-07 16:19:32 75

原创 二分查找stl

lower_bound 返回第一个范围内大于或等于查找值的地址单位,若没查找到则返回end地址,反之通过减去首地址+首地址下标得目标地址upper_bound返回第一个小于目标值。。。。注意精度给的对象是谁ll快快读模版:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inmax=40000008;char IN[inmax+5],*ipos;#defin..

2022-04-07 11:57:30 99

原创 期望dp1.0

1.dp用以处理相邻间有递推关系的(可以复杂多维)如这里第i个的选择只会影响前一个和后一个2.记录状态,三维dp[i][j][k]代表当前是第i个,j表示前i-1个有多少个已经选择,k表示当前是否选择这里第二维的范围是限制,跑的时候可以跑大一些,最后更新ans可以按题目限定的范围内跑就可以#include<bits/stdc++.h>using namespace std;typedef long long ll;int a[305][305];int c[2005],.

2022-04-06 17:53:42 180

原创 给定种数及数目物品,不放回取出,连续取出所有不同种物品,触发效果,求期望效果

类比纸箱子先后不放回抽奖,前面的结果不会影响当下结果的概率,所以前面取完了k个不影响后面七个触发效果,每个点触发效果的概率,从情况数可求,所以各个点累加期望即可小魔女帕琪 - 洛谷#include<bits/stdc++.h>using namespace std;typedef long long ll;ll a[8];ll s;double s1;double ss;double s7;int main (){ s1=1; s7=1; ..

2022-04-06 13:39:25 286

原创 期望线性性

每多一个1带来的贡献增值是:(x+1)^3-x^3=3*x^2+3*x+1,这里的x是前面已经累计的连续1的个数,而对于每一位的期望贡献就是p[i]*E(3*x^2+3*x+1)=p[i]*(3E(x^2)+3E(x)+1,在累加即得答案,所以这一要求得每一位的E(x^2)与E(x),有递推:x=x-1+1E(x)=(E(x-1)+1)*p[i]x^2=(x-1)^2+2*(x-1)+1E(x^2)=(E((x-1)^2)+2*E(x-1)+1)*p[i]写出一般等式,在求两边期望.

2022-04-01 15:30:23 190

原创 期望dp(难

1.无限n种物品,等概率抽取,求集齐所有种类物品的期望情况。首先每轮概率给定,期望情况是固定的。而期望价钱与期望次数相联系,所以先求期望次数,影响期望次数的变量是还需要集齐的种数,设f[i]表示当前已经收集i种是需要进行f[i]次才能收集全,递推:f[i]=i/n*f[i]+(n-i)/n*f[i+1]+1;(转变需求目标,分步处理)2.接着联系价钱,设g[i]为已经集齐i种还需要花的钱,这里由于考虑的是期望价格,所以每个g[i]都是固定的,为了方便计算价格,就把价格降序,所以考虑一个递推式:.

2022-04-01 11:32:36 153

原创 等概率跑图(

绿豆蛙的归宿 - 洛谷广搜记录每条路径的每个点的概率,重复路重复记录,按权重累计求和#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=998244353;const int nn=1e5+50;inline int read(){ int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') { .

2022-03-31 19:38:57 138

原创 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 116

原创 完全背包+容斥

[HAOI2008]硬币购物 - 洛谷给定4⃣️种硬币价值,多次提问给定各个硬币个数,和商品价值,求付款方式数1.完全背包o(值域)计算不限制硬币个数在值域范围内的付款种数2.状压容斥去重#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#include<algorithm>using.

2022-03-30 17:22:58 133

原创 判断所有范围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 263

原创 查找字符串内的子串是否存在

开个二维数组记录,第一维是所在字符下标第二维是所有种类的字符,含义为该下标往后的第二维字符最早出现的下标,从后往前预处理,对于每个子串顺序遍历即可(类似于tire)登录—专业IT笔试面试备考平台_牛客网#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;int nex[100005][27];int a[27];char s[100005];int ..

2022-03-25 16:13:30 1645

原创 二维dp求划分个数

盒子与球 - 洛谷#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;int f[15][15];int main(){ int n,r; cin>&gt.

2022-03-24 02:16:58 131

原创 求上一个排列

1.stl直接求#include<bits/stdc++.h>using namespace std;int n,a[10000];int main(){ cin>>n; for(int i=0;i<n;i++) //读入数据 cin>>a[i]; if(prev_permutation(a,a+n)) //如果为真就输出数组 for(int i=0;i<n;i++) .

2022-03-23 22:35:05 228

原创 打表暴力验证题目猜想的部分结论

[Celeste-B]Golden Feather - 洛谷节点值为(i+1)^2-1. 求n个点生成一颗生成树的最短总路径猜想总能找到前面的互质的数暴力打表发现只有4和10和之前的数没有互质情况,且经验证当n==4与n==10,4与10最小为3所以特殊输出,而只要往后一个就可以化解所以即利用打表暴力,将问题限制到一个有限简单的问题来处理#include<iostream>#include<cstring>#include<vector>.

2022-03-23 17:54:42 3541

原创 线性筛求欧拉函数

定点共线条件可转换为gcd即一个互质对应一条边,即求欧拉函数(注意n==1的特殊情况)[SDOI2008] 仪仗队 - 洛谷#include<bits/stdc++.h>using namespace std;const int maxn=4e4+50;//1e9超126M int phi[maxn],pri[maxn];bool ispri[maxn];int n;void solve(){ int cnt=0; memset(ispri,true,si..

2022-03-23 17:42:42 148

原创 excrt扩展剩余定理#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#

n个同余方程顺序做n次exgcd,每次以累计lcm作exgcd主元,以新mod作mod,每次ans累加一个exgcd最小值,记得每次ans取累计lcm保证最小正【模板】扩展中国剩余定理(EXCRT) - 洛谷#include<iostream>#include<cstring>#include<vector>#include<cstring>#include<cmath>#include<algorithm>#

2022-03-23 12:01:33 131

原创 中国剩余定理

求多个同余方程公共解qmul防止乘法爆ll[TJOI2009] 猜数字 - 洛谷#include<bits/stdc++.h>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; } ll d=exgcd(b,a%b,x,y);...

2022-03-23 09:43:22 514

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除