自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 训练记录呐

训练的记录,用来督促自己~

2022-04-27 14:11:09 759

原创 清楚姐姐玩翻翻乐[期望dp]

经过探索我们发现,除了(1,1),(2,2)这两种特殊情况的最优操作比较奇怪以外,另外的状态就直接无脑翻两张未知就可以了。因为通过基本的概率论计算我们可以知道翻一张知道点数和一张未知点数的卡片,两者相同的概率只有的概率只有。首先模拟1张已知3张未知,通过简单的计算我们可以得到翻两张未知更加优秀,同时通过计算过程我们可以发现未知牌数增多会增加翻"一张已知一张未知“的操作次数期望。然后模拟2张已知2张未知,通过计算我们发现第一次操作翻一张已知一张未知更加优秀(在这里你可能会很失望,感觉找不出规律了)。

2023-01-30 23:03:07 467 1

原创 穿越万年的轮回[期望dp]

对于四种情况各自分类讨论即可。但值得注意的是空串不在我们的考虑范围内,得提出来单独计算。串,也就是第一种操作,这里面的串的概率和贡献会如何变化呢?首先我们要来思考一下期望的本质,这样一个状态,我们以。为例,里面可能有很多种情况,比如串。那么我们考虑在这个状态后面接上一个。每一种有一个概率和贡献,假设有。种情况,每一种的概率是。的串的概率,即可转移。

2023-01-20 22:35:27 703

原创 常见反演技巧

反演二项式反演莫比乌斯反演习题莫比乌斯反演UOJ Round #5 CP2257 YY的GCDCCPC 广州2021K反演定义:假设有两个函数fff和ggg满足f(n)=∑某种规则an,ig(i)f(n)=\sum_{某种规则} a_{n,i}g(i)f(n)=某种规则∑​an,i​g(i)已知fff求ggg的过程就称为反演首先,在线性代数里面我们已经学过一般加法的形式,对于AX=YAX=YAX=Y可以容易的O(N3)O(N^3)O(N3)求出X=A−1YX=A^{-1}YX=A−1Y,那.

2022-04-03 19:51:13 1121

原创 ABC243G Sqrt

#include<bits/stdc++.h>#define ll long longusing namespace std;unsigned ll a[100005];unsigned ll Sqrt(unsigned ll x){ unsigned ll l=1,r=5e9; while(l<r) { unsigned ll mid=(l+r+1)>>1; if(mid*mid<=x)l=mid; else r=mid-1; } re.

2022-03-17 21:26:37 704

原创 ABC243F Lottery[组合数学]

题意:给你NNN种物品,每种被选取的概率是P[i]P[i]P[i],独立的取KKK次,问取到的物品种类数恰好是MMM的概率思路:如果考虑物品选取的先后次序,对于选取物品的序列a1a2a3...aKa_1a_2a_3...a_Ka1​a2​a3​...aK​(其中aia_iai​表示第iii次选取的物品ididid)P(a1a2...aK)=∏i=1KP[ai]P(a_1a_2...a_K)=\prod_{i=1}^{K} P[a_i]P(a1​a2​...aK​)=i=1∏K​P[ai​]现在需

2022-03-17 20:27:43 830

原创 ABC240G Teleporting Takahashi[组合数学]

题意:走NNN步从(0,0,0)(0,0,0)(0,0,0)走到(X,Y,Z)(X,Y,Z)(X,Y,Z)的不同路径条数(每一步不能不走且步长为1)不失一般性的我们可以设(X,Y,Z>0)(X,Y,Z>0)(X,Y,Z>0)首先考虑走(X+Y+2k)(X+Y+2k)(X+Y+2k)步从(0,0)(0,0)(0,0)走到(X,Y)(X,Y)(X,Y)枚举XXX正方向的步数(X+i)(X+i)(X+i),总的走法就是Cx+y+2kk∑i=0kCki×Cx+y+kx+i=Cx+y+2kk

2022-02-22 21:12:17 547 2

原创 CF1638E colorful operations

考虑用线段树维护。如果某一段颜色相同,均为xxx,那么把这一段颜色改为yyy相当于先加上目前颜色laz[x]laz[x]laz[x]的贡献然后减去之后颜色laz[y]laz[y]laz[y]的贡献。queryqueryquery的时候输出query(x)+laz[color[x]]query(x)+laz[color[x]]query(x)+laz[color[x]]即可,因为每次修改颜色的时候对区间赋值,所以复杂度被均摊。#include<bits/stdc++.h>#define l.

2022-02-15 18:18:43 506

原创 CF1637E Best Pair

题意:给你一个多重集,求(x+y)×(cntx+cnty)(x+y)\times(cnt_x+cnt_y)(x+y)×(cntx​+cnty​)的最大值,其中x!=yx!=yx!=y且有mmm对(x,y)(x,y)(x,y)是不能选的首先枚举(x,y)(x,y)(x,y)是O(N2)O(N^2)O(N2)的,我们考虑枚举(cntx,cnty)(cntx,cnty)(cntx,cnty),因为不同的cntxcntxcntx是O(N)O(\sqrt N)O(N​)的,先枚举(cntx,cnty)(cnt_x.

2022-02-13 14:40:46 404

原创 CF1634 F. Fibonacci Additions

题意:qqq次操作,每次给数组AAA或者BBB的[l,r][l,r][l,r]位置加上一个斐波那契数列,问每次操作之后ABABAB数组是否相同考虑斐波那契的生成函数f(x)=1+1x+2x2+...+fibi−1xi+...=∑i=0fibi+1xixf(x)=∑i=1fibixi,x2f(x)=∑i=2fibi−1xif(x)−xf(x)−x2f(x)=1f(x)=11−x−x2 f(x)=1+1x+2x^2+...+fib_{i-1}x^i+...=\sum_{i=0}fib_{i+1}x^i\.

2022-02-12 11:08:09 1052 5

原创 CF1634E Fair Share

题意:有mmm个数组,每个数组数字数量都是偶数。把每个数组对半分给集合A、BA、BA、B使得最终得到的可重集相同判断是否合法并且给出方案。首先赛场上大概就只想到欧拉回路,但是因为没有拆点建图,只能做不可重集的情况,后来也就无奈下播。做法是建立一张二部图,左部mmm个点表示每个数组,右部cntcntcnt(数字种类数)个点。左部向右部数字iii的有向边表示iii分给AAA集合,反之表示分给BBB集合。容易知道原问题等价于二分图上搜欧拉回路。然后因为也不需要输出路径,就用类似黑白染边,然后不断搜环就可。

2022-02-11 21:46:28 480 1

原创 在这冷漠的世界里光光哭哭

对于一个子串abcabcabc,可以容易的求出前iii位子序列个数,记为dp[i][a][b][c]dp[i][a][b][c]dp[i][a][b][c]对于一个子串ababab,可以容易的求出前iii位子序列个数,记为dp[i][a][b]dp[i][a][b]dp[i][a][b]对于一个子串aaa,可以容易的求出前iii位子序列个数,记为dp[i][a]dp[i][a]dp[i][a]首先考虑dp[r][a][b][c]−dp[l−1][a][b][c]dp[r][a][b][c]-dp[l.

2022-02-09 09:04:03 352 2

原创 F - Two Exam(AtCoder Beginner Contest 238)

首先按照PPP属性排序所有人,按照PPP属性升序顺序选人,则只需要考虑QQQ属性的大小关系。设DPDPDP状态为dp[i][j][k]dp[i][j][k]dp[i][j][k]表示前iii个人中选择jjj个,其中最小的没有被选择的人的QQQ属性为kkk的方案数量考虑第i+1i+1i+1个人选或者不选如果k>第i个人的Q属性dp[i][j+1][k]=(dp[i][j+1][k]+dp[i−1][j][k])否则dp[i][j][k]=(dp[i][j][min(k,第i个人的Q属性)]+dp

2022-02-05 22:52:54 208

原创 炸鸡块君与FIFA22

考虑倍增#include<bits/stdc++.h>#define ll long longusing namespace std;int st[200005][3][20];char s[200005];int main(){ int n,q; scanf("%d%d",&n,&q); scanf("%s",s+1); for(int i=1;i<=n;i++) for(int j=0;j<=2;j++)

2022-02-02 10:58:54 548

原创 ABC235 F Variety of Digits

题意:给一个小于1010410^{10^4}10104的整数NNN找不大于NNN的满足数位中有c1...cnc_1...c_nc1​...cn​的数字。考虑数位dpdpdp,dp[pos][sta]dp[pos][sta]dp[pos][sta]表示第pospospos位,数位中已经出现的数字种类情况是stastasta的方案数,dp2[pos][sta]dp2[pos][sta]dp2[pos][sta]表示第pospospos位,数位中已经出现的数字种类情况是stastasta的贡献和,总体来讲是非.

2022-01-16 13:39:15 599 1

原创 CCPC威海2021M. 810975

题意进行了nnn场比赛,获胜mmm局,其中最长连胜是kkk,问有多少种情况。考虑anskans_kansk​为:进行了nnn场比赛,获胜mmm局,其中最长连胜大于等于kkk,问有多少种情况。因为有n−mn-mn−m个负场,所以考虑把每个负场的周围当成空然后插入胜场。枚举iii为连续长度大于等于kkk的胜场次,枚举这些连续胜场所在的空,数量是(      in−m+1)(^{n-m+1}_{\ \ \ \ \ \ i})( &nb.

2021-12-02 21:06:58 1651 4

原创 2017 USP Try-outs C. Coprimes

传送门:Coprimes题意:给你一个长度为nnn的数组,问lll到rrr位置间是否有互素对(a[i],a[j])=1(i≠j)(a[i],a[j])=1(i\not=j)(a[i],a[j])=1(i​=j)对于每个位置lll,我们可以求出最小的rrr,使得[l,r][l,r][l,r]之间有互质的数对。随着lll的增大,rrr一定会增大,因此我们可以考虑尺取。在右端点进入和左端点退出的时候,我们尝试维护区间内不互质数对的个数pairpairpair。对于μ(x)≠0μ(x)≠0μ(x)​=

2021-11-16 20:01:35 153

原创 AtCoder Grand Contest 013 E - Placing Squares

让我们欣赏一下官方题解首先贡献和可以通过一个巧妙的转换变成方案数。将原问题的模型稍微修改一下:现在有n个连续的空格,其中左边界和右边界必须放置隔板,可以在两个相邻空格摆放隔板,可以在空格内放红球和蓝球。原问题等价于转换后问题的方案数。考虑dp[i][j]dp[i][j]dp[i][j]为考虑前iii位,最后一个隔板之后有jjj个球的方案数。考虑转移就是暴力枚举在第iii个位置放了(0,1,2)(0,1,2)(0,1,2)个球和是否在第iii个位置放置挡板,具体推导过程不在赘述dp[i][0]=dp

2021-11-11 14:56:47 433

原创 Educational Codeforces Round 116 (Rated for Div. 2) E. Arena

dp[i][j][k]dp[i][j][k]dp[i][j][k]表示最大值为iii长度为jjj小于j−1j-1j−1的数字有kkk个考虑一轮之后状态变为dp[i−(j−1)][j−k][...]dp[i-(j-1)][j-k][...]dp[i−(j−1)][j−k][...],故转移为dp[i][j][k]=∑(Cjk∗(j−1)k∗dp[i−(j−1)][j−k][l])dp[i][j][k]=\sum(C^k_j*(j-1)^k*dp[i-(j-1)][j-k][l])dp[i][j][k]=.

2021-10-30 00:47:54 229

原创 2020CCPC秦皇岛 J - Kingdom‘s Power

#include<bits/stdc++.h>using namespace std;vector<int>v[1000005];int siz[1000005],dep[1000005];int dp[2][1000005];void dfs1(int x,int pre){ siz[x]=1; if(x!=1)dep[x]=dep[pre]+1; for(auto to:v[x])if(to!=pre) { dfs1(t

2021-10-29 19:00:18 187

原创 EOJ 2021.10 E.异或树

E. 异或树方法一:先开一个大根堆。然后dfsdfsdfs一遍, 建出可持久化字典树, 并且每个点把自己和祖先的异或最大值扔进堆。循环kkk次, 每次从堆中弹出最大值, 假设被弹出的点已经被弹出来了xxx次, 则在字典树上搜它的第x+1x+1x+1大的异或值, 再扔进堆里即可。时间复杂度O(30n+k(logn+30))O(30n+k(logn+30))O(30n+k(logn+30))(这道题里面也体现了一个技巧就是做第k大值(k<1e61e61e6)常见都方法就是维护一个优先队列每次取出最大

2021-10-26 21:53:46 184

原创 Codeforces Round #732 (Div. 2) D. AquaMoon and Chess

首先我们来考虑比较简单的情况110000000000011000000000001100000000000把111111看做一个团,这个团可以在数轴上移动,每一种团的情况对应一种statestatestate推广,对于一个奇数长度的连续串000011111000000000011111000000000011111000000可以知道里面有len/2len/2len/2个团,当这个连续串左右团的数量确定的时候这个团留下的“1”位置唯一确定,比如上面的例子,可以知道如果两个团在左边那么留下的就是最右

2021-07-12 00:32:19 142

原创 ST表和倍增算法(Array Stabilization (GCD version)Codeforces Round #717 (Div. 2) D. Cut)

ST表ST 表是用于解决可重复贡献问题的数据结构。可重复贡献问题是指对于运算optoptopt,满足xoptx=xx optx=xxoptx=x,则对应的区间询问就是一个可重复贡献问题。----------------------------------------------oi-wiki应用1、区间最值、gcdfor(int j=1;(1<<j)<=n;j++)for(int i=1;i<=n;i++){ if(i+(1<<j)-1<

2021-07-11 15:09:38 150

原创 Codeforces Round #721 (Div. 2)B1. Palindrome Game (easy version)B2. Palindrome Game (hard version)题解

瞧瞧是谁在打这自闭的div。哦,原来是我。C太简单就不讲了,注意离散化一下1e9的范围。我们先来看easy version,题意是给你一个回文串,你可以进行两个操作,把一个0变成1或者跳过这回合(当且仅当当前不是回文串)。容易知道只和0的数量有关。n=1n=1n=1,后手赢n=奇数n=奇数n=奇数因为知道最中间的元素是0,我们先拿最中间的元素。000100000010000001000然后第二个人不能翻转,因为这个时候是回文串,没关系,我们和他对称的选。01112200111220011

2021-05-21 00:36:23 723 6

原创 Educational Codeforces Round 109 (Rated for Div. 2)C. Robot Collisions D. Armchairs题解

先说D本来打算找一道前缀和优化dpdpdp的例题的,一直找不好简单的太简单,难的太难。今天打开divdivdiv,哟吼,这例题不就来了。题目的意思是有nnn个座位mmm个人(m<n/2)(m<n/2)(m<n/2)坐在一些位置上,现在要求原来这些坐着人的位置都空出来,让这些人坐在其他座位上,问移动距离总和的最小值。这题的状态就很肌肉记忆了,dp[i][j]dp[i][j]dp[i][j]表示第i个人坐到第j个原来空着的位置,并且前i个人完全匹配的最小移动距离。我们来考虑转移dp[

2021-05-16 18:33:42 485 5

原创 一类匹配问题

问题1:有一个糖果的集合,里面有nnn种糖果,每种有cic_ici​个,要把这些糖果分给一些小朋友,使尽可能多的小朋友开心。某个小朋友开心,当他拿到两种不同的糖果加强:有一个糖果的集合,里面有nnn种糖果,每种有cic_ici​个,要把这些糖果分给一些小朋友,使尽可能多的小朋友开心。某个小朋友开心,当他拿到两种不同的糖果,且他拿到糖果的数量大于等于m(m>2)m(m>2)m(m>2)记sum=∑cisum=\sum c_isum=∑ci​ maxc=max{c1,c2,...

2021-04-29 18:47:36 142 2

原创 Codeforces Round #716 (Div. 2) D. Cut and Stick

这题首先对于一个区间我们只需要负责处理最多次出现的那个元素即可,某个区间的答案是2∗(这个区间里最多出现的元素个数)−区间长度2*(这个区间里最多出现的元素个数)-区间长度2∗(这个区间里最多出现的元素个数)−区间长度这个用数组维护一下数据结构即可,因为询问的都是连续区间,所以想到莫队,就写了一下欢乐ac了 #include<bits/stdc++.h> using namespace std; #define ll long long const int m

2021-04-19 23:57:37 366 7

原创 Codeforces Round #715 (Div. 2) D. Binary Literature

因为我们知道三个串里面一定有两个串的0个数都大于或者都小于n个。所以我们就随便挑两个这样的串,让里面的0或者1成为他们的公共子序列。就欢乐ac了,这也太水了 #include<bits/stdc++.h> #define ll long long using namespace std; char s[4][200005]; bool visa[200005],visb[200005]; int n,cnt[4]; int judge(

2021-04-17 00:55:39 198 3

原创 Educational Codeforces Round 107 (Rated for Div. 2) E. Colorings and Dominoes

这题我们的想法是,把横向和纵向的方格分开来看。显然横向和纵向都只需要考虑一种颜色(进一步的,我们把横向和纵向的o方格分成若干个连续段,我们只需要处理出每个连续段的答案即可)问题变成了1*n的全o方格value和。这个我们可以dp求出,把红蓝看成是01串。长度为i的value和等于长度为 i-1的value和 *2 加上长度为i-1的01串中末尾连续1为奇数个的串的个数。然后就欢乐ac了 #include<bits/stdc++.h> #define ll long l

2021-04-13 00:51:40 178 2

原创 Codeforces Round #712 (Div. 2) D. 3-Coloring(构造)

我们知道如果用一种颜色把对角网格全涂满的话,剩下的部分是可以随便涂的。所以我们用1去涂主对角网格,用2去涂副对角网格。一定有一个先涂满。然后就随便涂色了!斜线的是主对角网格ac代码 #include<bits/stdc++.h> using namespace std; char a[300005]; struct edge { int x,y; }; queue<edge>q1,q2; int ma

2021-04-04 01:15:35 222 2

原创 期望dp和概率dp

概率正着推,期望倒着推。期望dp一、无后效性的期望dp例1.1 Favorite Dice 甩一个n面的骰子,问每一面都被甩到的次数期望是多少。令dp[i]dp[i]dp[i]表示目前已经甩到iii个数字,从当前状态到每一面都甩到的期望次数。首先我们知道dp[n]=0dp[n]=0dp[n]=0,因为此时已经每一面都甩到了。对于dp[i]dp[i]dp[i],当前已经掷出iii个字母,掷出重复字母的概率是i/ni/ni/n,掷出新字母的概率是(n−i)/n(n-i)/n(n−i)/n所以dp

2021-03-09 13:08:44 418 2

原创 二分图与网络流

一、二分图匹配(匈牙利算法)匈牙利算法的本质是在二分图里面搜索增广路,因为每条增广路取反可以使最大匹配+1。可以证明:如果在某一时刻,找不到以x为起点的增广路,则增广几轮之后仍不会找到。所以只需要遍历一次左部的点,对于每个点寻找一次增广路即可。需要注意的是vis[i]的功能,因为增广路为u−>to−>u′−>to′...u->to->u'->to'...u−>to−>u′−>to′...因为我们知道增广路没有环,所以需要标记vis[to]vis[

2021-03-06 13:20:34 325

原创 时间复杂度和空间复杂度

复杂度在这里指就是时间复杂度一些常见的复杂度:冒泡排序、选择排序(n^2)归并排序(nlogn)埃氏筛法(nlogn)欧拉筛法(n)计算复杂度的意义:评测机一秒约运行500000000(5e8)次,想要不超时需要把复杂度控制在1e8左右。所以可以通过观察数据范围选择算法,如果是1e4可以n^2过,1e6可以nlogn过,1e8可以n过,超过1e8就只能O(1)过。(即找出规律直接判断。)复杂度的简单优化:例1:对于一个长度为n的数列,要求出其中前1,2,3,…,n个数的和,并将其输出在

2020-12-02 19:42:29 835 4

空空如也

空空如也

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

TA关注的人

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