自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 639. 解码方法 II

解码方法 II 动态规划, 以 i 为结尾的数目 由 i - 1 和i - 2 推到过来,也就是当前单个字符为一种分法,当前和前一个字符为一个分法。 以单个字符为一种分发那么 dp[i]=dp[i−1]∗xdp[i] = dp[i - 1]*xdp[i]=dp[i−1]∗x其中x 为当前的情况数 ,如果当前字符为 * 那么 情况数为 9 如果当前字符为 ‘0’ 则情况数为0,其他情况则为 1 与前面一个字符一起作为一个分发则dp[i]=dp[i−2]∗ydp[i] = dp[i - 2]*ydp[i].

2021-09-27 21:01:41 125 1

原创 2021-09-24

LeetCode 2009. 使数组连续的最少操作数 这个题的思路还是挺奇妙的,一定要注意题目给的条件。 首先元素不能重复,那说明对于这道题我们需要对输入进来的数组进行去重,然后在进行操作 最大值跟最小值的差不能超过 length - 1,需要注意(后面来说) 首先对数组进行排序去重后,选取一段区间[l,r][l , r][l,r]表示不需要修改的区间,则需要修改的数字有n−(r−l+1)n - (r - l + 1)n−(r−l+1)个,这个区间还有nums[r]−nums[l]+1−((r−l)+

2021-09-24 22:18:41 138

原创 AVL模板

注意左旋右旋方式 LL LR RR RL 的处理方式 右 子左自右 左 子右自左 #include <bits/stdc++.h> using namespace std; const int maxn = 100005; struct node{ int l, r, val; int height, size; }avl[maxn]; int cnt = 0, root; i...

2020-03-03 19:43:27 240

原创 Codeforces Round #622 (Div. 2)C2

题目链接 单调栈维护出每个点左边最大值和右边最大值就行 #include <bits/stdc++.h> using namespace std; #define int long long int a[500005]; int sum[500005]; int sum1[500005]; signed main() { int n; cin >> n; for(in...

2020-02-25 17:39:44 161

原创 manacher

还是很简单的 搞清楚几种状况就可以, 证明网上都有 #include <bits/stdc++.h> using namespace std; const int maxn = 3e5+5; char s[maxn],str[maxn]; int len,len1; int p[maxn]; void init() { str[0] = '*'; str[1] = '#'; i...

2020-02-04 15:39:20 125

原创 AC自动机

刚学 ac自动机,其实就是Tire的扩展,外加一个 fail指针,避免每次从树根遍历,fail指针指向当前字符串最长的后缀。看图吧 两个字符串: abc bc 建完字典树之后: 加入fail指针: 没有后缀的话 指向根节点,比如 abc c的fail指针我们先找 bc 没有的话 找c 还没有的话就指向根 加个题 HDU 2222 #include <bits/stdc++.h&g...

2020-02-04 14:20:55 106

原创 Codeforces Round #609 (Div. 2) E. K Integers

题目连接 数字相邻只需求出逆序对就好,但是 不相邻,那么我们可以将所有的数字移到中间位置(贪心可证明),然后求出每个数字移到中间的代价之和即可,逆序对可以边算边求,每次求出这个数字之前比它小的数字的个数,那么 用这个数字减去个数在减一就是后面的比它小的数字的个数,也就是逆序对要增大的值。 #include <bits/stdc++.h> using namespace std; #d...

2019-12-29 16:36:01 184

原创 4720: [Noip2016]换教室

题目链接 有n节课要上,每节课有固定教室c[i],有m次交换机会,可以将每节课教室换到d[i],有v个教室,e条边。问你依次上完课的最小期望 概率dp X 表示总的距离,那么 X=∑i=2nXiX = \sum_{i = 2}^n X_{i}X=∑i=2n​Xi​其中XiX_{i}Xi​表示第i - 1节课到第i节课的距离 那么E(X)=∑i=2nE(Xi)E(X) = \sum_{i = 2}^...

2019-12-20 20:58:06 104

原创 概率期望

由于对于这方面实在害怕,所以做几道题来看看 A - Favorite Dice 给一个n面的筛子问你扔到所有面的期望 方程 dp[i]=1+i/n∗dp[i]+(n−i)/n∗dp[i+1]dp[i] = 1 + i/n*dp[i] + (n - i)/n*dp[i+ 1]dp[i]=1+i/n∗dp[i]+(n−i)/n∗dp[i+1] dp[i] 表示仍够n个面还差i个面的期望 那么扔到前i个...

2019-12-20 13:45:55 118

原创 Codeforces Round #604 (Div. 2)

飞机直达 A - Beautiful String 题意思路略 #include <bits/stdc++.h> using namespace std; int vis[4]; int main() { int t; cin >> t; while(t --){ string s; cin >> s; int flag = 0; for(...

2019-12-19 19:40:21 101

原创 Codeforces Round #605 (Div. 3)

飞机直达 A 略 B 略 C 略 D 维护i的左右长度,每个数都删除一次然后去最长 #include <bits/stdc++.h> using namespace std; #define int long long int a[200005]; int l[200005]; int r[200004]; signed main() { int n; cin >> n...

2019-12-19 11:17:06 83

原创 codeforces 603Div2

D题 并查集搞一搞就过了 #include <bits/stdc++.h> using namespace std; const int N = 200005; map<char, int > mp; int pre[N]; int finds(int x){ return x == pre[x]? x: pre[x] = finds(pre[x]); } void un...

2019-12-11 22:31:32 84

原创 E - Yet Another Division Into Teams

题目连接 先将每个人的能力值从小到大排序,每个队最多5个人最少3个人,然后dp记录位置 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 100000 + 5; const int INF = 0x3f3f3f3f3f3f3f3f; struct node{ int x,...

2019-11-21 20:58:27 123

原创 D. Harmonious Graph

题目链接 找出每个联通块最大值最小值,两者之间的所有数必须在同一个联通块内,将所有的最大值最小值找出来,将他们抽象成区间,区间有重复的就合并成一个, 然后暴力找出这个区间中的不在这个联通块的数,并查集连一下。 水体。。 B题的模拟模了半天最后还挂了,下次就先往后做。 晚上写题真的懵逼啥也想不到,烦。。。。。 时间复杂度O(n + m) #include <bits/stdc++.h> ...

2019-11-18 19:37:18 118

原创 D. Binary String Minimizing

题目链接 并查集模拟就行 写代码要细心 #include <bits/stdc++.h> using namespace std; #define int long long const int N = 1000006; int pre[N]; int finds(int x){ return x == pre[x]?x: pre[x] = finds(pre[x]); } void...

2019-11-16 15:50:59 151

原创 1201 整数划分

题目链接 思维加dp dp[i][j]dp[i][j]dp[i][j]表示数字i选择j个数字组成,因为要j个数字,那么我们看数字i−ji - ji−j由j个数字组成的个数,只需要这些数字每个数字增加1就可以变成i,这样我们还差了一部分,我们还可以看数字i−ji - ji−j由j−1j - 1j−1个数字组成的个数,我们还是让这j−1j - 1j−1个数字每个数都增加1,得到i−1i - 1i−1,...

2019-11-04 14:55:54 256

原创 1249 近似有序区间 51nod

题目链接 线段树加一点剪枝, 固定每个点为左端点,找出做最大近似区间,然后在这个区间中找有多少个满足题意的右端点,线段树查询最大值。倒着扫描。 参考 代码 #include <bits/stdc++.h> using namespace std; #define rs rt << 1|1 #define ls rt << 1 const int N = 5000...

2019-11-03 20:36:52 194

原创 数论分块

题目链接 一个数论分块 一个等差数列 数论分开的板子一直记得是个错的 妈蛋 记得加mod 因为 等差数列是递减的 我一直以为是越界 int128都上了 #include <bits/stdc++.h> using namespace std; const int mod = 1e9+ 7; #define int long long typedef long long ll; typ...

2019-11-01 11:24:10 144

原创 wannafly挑战赛29

A题目链接 直接求出所有可能出现的数字标记一下,然后看给出的数字是否全都出现过,然后在判断和是否是n 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef __int128 LL; map<ll , int> mp; void dfs(ll x){ if(x ==...

2019-10-23 21:35:07 125

原创 牛客练习赛53

B 题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod = 1e9 + 7; const int N = 3e6 + 5; ll quick(ll a, ll b){ ll ans = 1; while(b){ if(b&1...

2019-10-16 17:18:40 107

原创 Color西安邀请赛 (二项式反演)

题目链接 二项式反演 首先 m 个颜色选出k个 最终答案要乘上CmkC^k_mCmk​,然后对于第一个格子我们知道有k中方案,对于之后的所有格子我们有k−1k - 1k−1中所以总共的就是k∗(k−1)n−1k*(k - 1)^{n - 1}k∗(k−1)n−1这时我们求出来的是不超过颜色不超过k的方案数,然后我们就能用到二项式反演求出恰好有k种颜色的方案数,二项式反演就是求出不超过k和恰好是k的...

2019-10-05 21:49:13 107

原创 Infinite Fraction Path(搜索)

题目链接 沈阳区域赛 搜索加剪枝 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 250000 + 10; struct node{ int pos, len; }; char a[N],ans[N]; int vis[N]; queue<node> q; ...

2019-10-05 11:05:46 352 1

原创 The Maximum Unreachable Node Set(最小路径覆盖数 二分图)

题目链接 最小路径覆盖数就是互不可达的点的个数 #include <bits/stdc++.h> using namespace std; const int N = 2005; int t; int maze[N][N]; int vis[N]; int match[N]; int n,m; bool dfs(int x){ for(int i = 1 ; i <= n; i...

2019-10-05 08:54:06 242

原创 2017 ccpc杭州B

题目连接 公式化简 之后求出每个质因子对于答案的贡献度,先枚举出所有的因子,即枚举质因子相乘的情况,然后算出贡献度,分两次枚举,之后两次结果乘起来。 #include <iostream> #include <stdio.h> using namespace std; const int N = 25; const int mod = 998244353; int p[N]...

2019-09-28 21:29:31 143

原创 树的距离

题目链接 树状数组 离线。刚开始想的主席树维护不会写。。。 处理出数的dfs序,然后将距离从大到小放入树状数组,树状数组维护每个点到1点的距离之和,在维护一个区间点的个数,这个区间就是dfs序跑出来的每个点对应的子树区间。 最后查询时,要用距离之和减去点的个数*dis[x]dis[x]dis[x] 代码: #include <bits/stdc++.h> using namespace...

2019-09-18 21:06:32 383

原创 Dudu's maze

题目链接 给n个点m条边,k个陷阱,有个人从1开始走,不是陷阱答案加1,是陷阱,可以随机传送到与陷阱相连的某个边上,概率相等,这个人提前知道地图,问走过点的期望最大是多少。 无向图,可以来回走,走过的点就不会再产生贡献 先从1开始走,记录走过的节点个数,当碰到陷阱时停下,这个就是从1开始的贡献,概率为1,然后我们从1遍历到的陷阱开始,继续遍历整个图,之前走过的地方不能走,再次碰到陷阱停下来,然后计...

2019-09-14 22:06:36 144

原创 轻重链剖分(树链剖分)模板

洛谷题目链接 /* f数组表示当前节点的父节点 d数组表示当前节点的深度 size数组表示当前节点的子树大小 id当前节点的时间戳 rk当前节点时间戳对应当前节点的值(线段树的叶子节点是树上所有节点的时间戳构成的) son当前节点的重儿子 top当前节点所在重链的顶端节点 */ #include<bits/stdc++.h> #define ls rt << 1 #defi...

2019-09-11 11:59:27 217

原创 羊吃草

题目链接 二分图匹配 每次查询都进行一次二分图匹配 给每个点尽量分一只羊 看有多少个点匹配羊 #include <bits/stdc++.h> using namespace std; const int N = 200005; struct node{ int to, next; }edge[N]; int cnt = 0; int head[N]; void add(int...

2019-09-07 10:09:45 182

原创 super_log

南京网络赛B 题目链接 让你求出aaaaa^{a^{a^{a}}}aaaa 一共b个a 欧拉降幂 递归算出即可 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 5; int phi[N]; int mark[N]; ll prime[N]; ll quic...

2019-09-04 23:56:15 93

原创 Graph Games

牛客多校第三场 题目链接 给n个点m条边 两种操作1是反转l到r之间的边,把有边变成无边,把无边变成有边。 2是询问两个点所在的点集是否相同。 对边进行分块,我们首先得给每个点随即一个值,判断两个点是否在一个集合内,直接判断这个点和他相邻的点异或之后的两个值是否相同。首先我们先预处理出每个块中的每个点和他相连点的异或值,然后对于1操作,对于完整块我们直接用标记数组标记一下反转了偶数次还是奇数次,对...

2019-09-01 11:02:33 208

原创 Beautiful fountains rows

题目链接 题目大概意思是给n种球,长为m的数轴,给出n个区间,区间[li,ri][l_{i},r_{i}][li​,ri​]每个点都放上第i种球,让你求出区间长度之和,要求区间内有球,且球的个数为奇数。 这个题如果直接用数据结构我真不会,看网上的都是随机化,给每种球随机一个值,那么我们可以知道,某个区间如果符合要求,那么这个区间每个点的异或值应该======这个区间出现的数的异或值。 那么前一个我...

2019-08-29 20:47:00 132

原创 回文串

题目链接 回文树模板 cnt数组表示当前串在所有会问字串中出现的次数 len数组表示当前串的长度 num数组表示当前串的字串中本质不同的回文子串个数包括自己 p表示所有的本质不同的回文子串.(p - 2) #include<iostream> #include<cstdio> #include<cstring> #define max(a,b) ((a)>...

2019-08-24 17:12:44 109

原创 array

飞机 hdu 网络赛 权值线段树 , #include <bits/stdc++.h> #define rs rt << 1|1 #define ls rt << 1 using namespace std; const int N = 100000+5; int tree[N << 2],a[N << 2]; void build(i...

2019-08-24 15:29:44 75

原创 path(hdu网络赛)

飞机直达 简单搜索。。 #include<bits/stdc++.h> using namespace std; #define ll long long const int N = 500005; ll ans[N]; int a[N]; int n, m, Q; struct Node{ int x; ll y; int id; bool opera...

2019-08-24 09:21:31 115

原创 xor

牛客多校第四场 飞机直达 大佬博客 越来越懒得写思路了 代码: #include <bits/stdc++.h> using namespace std; const int maxn = 50000 + 5; typedef long long ll; typedef unsigned uint; uint tree[maxn << 2][40]; void inser...

2019-08-23 10:23:22 124

原创 类欧几里得

牛客多校第九场 题目链接 类欧几里得 。。。 这谁能想到,看了题解还是感觉联系不是很紧密,题解中的按位来做就是指,我们将二进制的每一位1的个数记录下来。然后算出贡献度就可以了 对于kM&M对于M的每个二进制位考虑就是 ⌊KM2i⌋−2∗⌊KM2i+1⌋\lfloor\frac{KM}{2^{i}}\rfloor -2*\lfloor\frac{KM}{2^{i + 1}}\rfloor⌊2...

2019-08-21 21:57:59 265 1

原创 关于初级反演

第一个题是BZOJ 2818 要求出gcd(x,y)==igcd(x,y) ==igcd(x,y)==i,iii是素数的对数,我们假设 f(n)f(n)f(n)为gcd(1,n)……gcd(n,n)gcd(1,n)……gcd(n,n)gcd(1,n)……gcd(n,n)的素数对数,所以S(n)=S(n−1)+f(n)S(n) = S(n - 1) + f(n)S(n)=S(n−1)+f(n),我们...

2019-08-19 20:15:45 123

原创 Just Jump

牛客多校第八场 题目链接 一个使用容斥思想的题目 官方给出的题解: 这里我使用的转移方法和官方给出的不同,用dp[i] 表示经过第i个障碍物所不合法的方案数 而计算后面障碍物的方案数时我们得把之前计算的方案数的一部分先减去,因为之前的障碍可以走到当前的障碍.所以当前非法的方案数中有一部分已经计算过一次 代码: #include <bits/stdc++.h> using namesp...

2019-08-19 14:40:59 206

原创 The power of Fibonacci

牛客多校第九场 题目链接 思路参考 代码: #include <bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9; const int loop1 = 768, p1 = 512; const int loop2 = 7812500,p2 = 1953125; const int ...

2019-08-16 21:28:52 153

原创 Explorer

牛客多校第八场E 题目链接 题目大意是给出一张图边权为(l,r)(l,r)(l,r),求出从1到n有多少满足每个边权的情况。 用线段树维护并查集,这些人也太强了点,将l, r离散化,然后我们用线段树的每个节点表示一个左闭右开的区间,比如 (2,5)(3,6)(2,5)(3,6)(2,5)(3,6)是两条路的边权离散化完之后我们就得到了(1,2,3,4)→(2,3,5,6)(1,2,3,4) \r...

2019-08-16 16:59:06 153

空空如也

空空如也

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

TA关注的人

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