自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 换根dp详解-------------------------思维

思路:首先这是个在树上用的东西,一般就是不告诉你哪个点作为根,而你就需要求出所有点作为根时的答案,然后才能得到最终的答案。思路也不是什么很神奇的东西:就是一开始先固定一个点作为根,然后 dp 一次求出解,然后利用这个解再做一次 dp——这次 dp我们称为换根,这次 dp 求出其他点作为根时的解。举例子: (此例子将会画图分析换根过程)题意:求1~n节点分别为根的最小深度和是多少解析:#include <bits/stdc++.h>using namespace std;

2020-08-07 12:16:34 1127

原创 问题 E: Songwriter------------------思维(构造)

解析:我们先从后往前遍历求出每个位置的可以取值范围的上下限设up[i]:为第i位置的上限设down[i]:为第i位置的下限分为三种情况第一种情况 a[i]==a[i+1] 那么up[i]=up[i+1],down[i]=down[i+1]第二种情况 a[i]<a[i+1] 那么上限最多up[i]=up[i+1]-1;那么下限down[i]=max(down[i+1]-k,l) 要么就是前一个的下限-k 要么就是l 两者取最大第三种情况 a[i]>a[i+1] 那么下限就是...

2020-08-31 13:46:31 138

原创 问题 K: Addition Robot---------------------------思维(线段树维护矩阵乘法)

解析:线段树维护区间矩阵乘法。每个节点都要维护矩阵因为本题有两个公式 A=A+B; B=A+B矩阵A: [AB]\begin{bmatrix}A &B\end{bmatrix}[A​B​] * [1011]\begin{bmatrix}1 & 0\\ 1 & 1\\\end{bmatrix}[11​01​] = [A+BB]\begin{bmatrix}A+B & B \end{bmatrix}[A+B​B​]矩阵B: [AB]\begin{...

2020-08-31 12:41:45 166

原创 问题 A: 20190-----------------------思维(组合递推+套路)

解析:由于要按照2019这个顺序递推,所以设‘2’=a ‘0’=b ‘1’=c ‘9’=d递推的方程式a=(a+1)%MODb=(b+a)%MODc=(c+b)%MODd=(d+c)%MOD这样就可以保证顺序的问题不会出错#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MOD=1e9+7;ll a,b,c,d;char s[1000005];int main(..

2020-08-29 23:45:16 93

原创 E. Clear the Multiset-------------------思维(分治+套路)

题意:给定n个数,2种操作第一种操作:横切切到底第二种操作:竖切切到底请问最少操作使得n个数为0解析:第一种横切得贡献是每次找到最小的然后切去,然后分治递归下去,详细看代码第二中竖切得贡献是r-l+1;两者取最小值。#include <bits/stdc++.h>using namespace std;const int N=1e5+100;int a[N];int n;int solve(int l,int r){ if(l>r) return..

2020-08-26 21:43:02 166 1

原创 D. Zigzags----------------------------思维(暴力+前缀和)

解析:枚举j和l 然后n^2暴力统计j左边的数出现的次数。枚举l的时候,如果出现a[j]==a[l],就要累加上[j,l]区间的 [1,j-1]这些数出现的次数即可,详细看代码吧,说的不咋地#include <iostream>using namespace std;typedef long long ll;int cnt[3005];int a[3005];int t,n;int main(){ cin>>t; while(t--)..

2020-08-26 17:22:43 233

原创 C. Binary String Reconstruction------------------------思维(模拟)

解析:暴力模拟#include <iostream>using namespace std;string s;int t,n,x;int a[200050];int main(){ cin>>t; while(t--) { cin>>s; cin>>x; int n=s.size(); s='0'+s; for(int i=0;i&l..

2020-08-26 17:11:28 149

原创 B. RPG Protagonist-------------------思维(贪心)

解析:对于刀和剑,我们肯定贪心选择单位最少的一个。那么我们枚举刀选了多少把假设刀选了i把那么主人要选剑的时候就是num1=min(cntw,(p-i*s)/w) 要减去选刀的代价跟随者也肯定选择单位最少的一个,所以跟随着一开始也选刀 那么就是num2=(cnts-i,f/s) 因为主人一开始选了i把需要减去跟随着选剑的时候num3=min(cntw-num1,(f-num2*s)/w)因为主人一开始选了剑所以要减去。又因为跟随者算了刀,携带的单位就要减去。枚举的答案就是 i+num1..

2020-08-26 16:57:27 216

原创 Dropping tests-------------------------------思维(0/1分数规划+二分)

解析:0/1分数规划模板题二分最大值midai-bimid>=0。通过上面公式算出t[i]=ai-bimid,然后排序t数组 删除前k个值,算出总和如果总和<0 说明mid 大了,这时候R=mid否则 说明mid小了,这时候L=mid#include <iostream>#include<algorithm>using namespace std;int n,k;int a[10005],b[10005];double res[10005]...

2020-08-24 17:58:17 123

原创 J - YJJ‘s Salesman-----------------------思维(树状数组+dp)

题意:给定n个坐标,每个坐标都有一个属性值。问你从(0,0)走到(1e9,1e9)属性之和的最大值你可以向右,向下,向右下走。只有向右下走才能获得属性值?问最大是多少?解析:这道题以看就是个dp。如果是个二维dp 那么状态方程f[i][j]=max(f[i-1][j],f[i][j-1],f[i-1][j-1]+v[i][j])但是这样是不可取的。所以我们就不枚举行了。我们按照x轴排序,y列从大到小遍历然后用树状数组维护[y-1,0]的最大值即可 然后dp下去#include<..

2020-08-21 17:47:11 292

原创 I - Tree and Permutation-------------------思维(组合数学)

题意:给定n个点,和n-1条边。设Pi 为第i种排列 Di为第i种排列相邻两点之间的权值之和问所有排列的权值之和是多少解析:我们先分析一条边(u,v)会在所有排列种出现多少次?假设有4个数,根据捆绑法 (u,v)出现的总的次数为A(33)A\tbinom{3}{3}A(33​)*A(22)A\tbinom{2}{2}A(22​)那么总的权值和就是:A(n−1n−1)A\tbinom{n-1}{n-1}A(n−1n−1​)A(22)A\tbinom{2}{2}A(22​)(sum(d(i,j)..

2020-08-21 15:53:42 263

原创 C - Dream-------------------------思维(2018ccpc+数论+费马小定理)

题意:给定一个p,p为质数,然后根据(m+n)p =mp +np让你构造一个pp 加法矩阵和 一个pp 乘法矩阵解析:因为p是质数 再根据(m+n)p = mp +np想到费马小定理 a(p-1) ≡ 1 (mod p)所以 ap = a(p-1) *a mod p = a mod p所以 (m+n)p = (m+n) mod p;所以根据这个构造即可#include <bits/stdc++.h>using namespace std;int t,p;int...

2020-08-20 16:19:27 228 1

原创 D - Find Integer----------------------------思维(2018ccpc+数论+费马大定理+奇偶数列法则)

题意:给定n和a, 让你求b和c ,使得 an + bn = cn解析:根据费马大定理,an + bn = cn. n>2无解当n0时 无解当n1时 让b=1,c=a+1;当n==2时 需要用到奇偶数列法则定理: 如a2+b2=c^2是直角三角形的三个整数边长,则必有如下a值的奇数列、偶数列关系成立;当a为奇数时{a= (2n+1)b= (n2+(n+1)2−1)c= (n2+(n+1)2) \left\{\begin{aligned}a &am.

2020-08-20 10:55:45 207 1

原创 F - Islands---------------------------------思维(强连通分量+缩点)

题意:给定n个点,m条有向边。问最少添加多少条边使得每个点都能到达其他点解析:求出强连通分量,然后找出入度为0的mx 和出度为0的mx1输出max(mx,mx1)即可注意强连通分量个数为1时,输出0#include <bits/stdc++.h>using namespace std;const int N=4e5+1000;int e[N<<1],ne[N<<1],h[N<<1],idx;int dfn[N],low[N],cnt..

2020-08-18 20:02:23 178

原创 强连通分量模板

解析:因为强连通分量内部每个点都可以互打,然后缩点。根据拓扑序判断每个强连通分量是否为出度为0的点,如果是代表着任何一点都可以到达这个强连通分量#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int e[N<<1],ne[N<<1],h[N<<1],idx;int low[N],dfn[N];int id[N],sz[N],cnt,scc;int n,m;boo..

2020-08-18 19:56:28 165

原创 H - Skiing----------------------------思维(拓扑图+dp)

题意:给定n个顶点,和m条带权的有向边,问最长路?解析:这就是傻逼题,拓扑排序+dp就行了。细看代码#include <bits/stdc++.h>using namespace std;const int N=1e5+10;int e[N<<1],ne[N<<1],h[N<<1],w[N<<1],idx;int in[N];int t,n,m;int d[N];void add(int a,int b,int c)..

2020-08-17 23:08:36 149

原创 二分图最大匹配(模板)

#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int n1,n2,m;int e[N],h[N],ne[N],idx;int match[N],res;bool st[N];void add(int a,int b){ e[idx]=b;ne[idx]=h[a];h[a]=idx++;}bool find(int x){ for(int i=h[x];~i;i=ne[i]) ..

2020-08-17 21:04:13 99

原创 E - Picking Goods----------------------------思维(dp)

题意:给定n*m的方格,给出k个(i,j)的ci权值 ,从(1,1)走到(n,m)的最大权值是多少限制条件:每行最多只能选3个解析:设f[i][j][0~3]:表示走到(i,j) 第i行选了0~3个的最大值从第i-1行选p个转移到第i行选p个f[i][j][p]=max(f[i][j][p],f[i-1][j][p])从第j-1列选p个转移到第j列选p个f[i][j][p]=max(f[i][j][p],f[i][j-1][p])从第j-1列选p-1个转移到第j列选p个f[i][...

2020-08-17 11:48:52 234

原创 牛牛找子集---------------------------思维(二分+贪心)

解析:二分枚举多少组满足题意。假设二分t组那么每一组的个数就是sum/t 这就是答案了#include <bits/stdc++.h>using namespace std;int n,k;vector<int> v;map<int,int> cnt;bool check(int t,int k){ int sum=0; for(int i=0;i<=100000;i++) { if(cnt[i]==.

2020-08-15 19:39:02 109

原创 染色法判定二分图--------------------------------模板(二分图染色法)

二分图:当且仅当图中不存在奇数环(环的边数是奇数)。两个集合内部都不存在连边#include<bits/stdc++.h>using namespace std;const int N=2e5+10;int e[N],ne[N],h[N],idx;int n,m;int color[N];void add(int a,int b){ e[idx]=b;ne[idx]=h[a];h[a]=idx++;}bool dfs(int u,int c){ color.

2020-08-06 17:25:06 293

原创 Equal Sentences--------------------思维(dp)

解析:设f[i]:表示前i个字符组成相似字符串的个数当a[i]==a[i-1] f[i]=f[i-1] 因为a[i]和a[i-1]无法交换当a[i]!=a[i-1] f[i]=f[i-1]+f[i-2] 分别表示可以交换和不交换不交换f[i-1],可以交换f[i-2]#include <bits/stdc++.h>using namespace std;const int MOD=1e9+7;typedef long long ll;int t,n;ll f[2...

2020-08-06 11:38:41 133

原创 Binary String To Subsequences-------------------------思维(队列)

题意:给定长度为n的字符串,让你把字符串分成多个子序列,使得每个子序列都不会出现连续相同的数?问最少划分多少个子序列,输出每个字符在第几个子序列中解析:用两个队列分别记录0和1出现在哪几个组中当遇到1的时候,我们判断q0是否为空,如果为空,则需要新分组。如果不空当前1可以和队头组成一组,然后把队头出队。再把1的分组序号记录到q1队列中遇到0 同上即可。#pragma GCC optimize(3,"Ofast","inline")#include<bits/stdc++.h>..

2020-08-06 10:34:43 295

原创 Deliver the Cake---------------------思维(拆点+最短路)

题意:张三拿着蛋糕要从起点s走到终点t的最少代价?给定n个村庄,m条边.每条边都有一个边权。每个村庄都有三个属性一个是蛋糕在左手L,一个是蛋糕在右手是R ,一个是蛋糕在中间M(不受限制)如果x->y 需要换手的,那么就要付出代价x解析:拆点对蛋糕在中间M拆成两个点,一个是L(点i),一个是R(点i+n)然后讨论u->v 建边如果s[u] == ‘L’&&s[v] == ‘R’ 或者相反(需要换手)add(u,v,c+x);add(v,u,c+x);...

2020-08-05 21:43:58 228

组合数学.pdf

1.1 排列 (1)在没有其他条件的情况下,从 个不同元素中选取 个不同的元素的排列数为 ,当 > 时, =0 (2)在 个不同元素中选取 个元素的圆排列的个数为 1.2 组合 (1)在在没有其他条件的情况下,从 个不同元素中选取r个不同的元素的排列数为 , 当 > 时, =0

2019-11-07

空空如也

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

TA关注的人

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