自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021 ICPC Asia Taiwan Online Programming Contest

https://codeforces.ml/gym/103373C. A Sorting Problem开始手动模拟了下过程,发现了关于下标的规律,假设第5个位置上是1,我们要把5移动到第五个位置,5的下标会变成1的下标,1到4的下标会变成2到5原来的下标。于是开始观察记录下标的数组。想了很久都没想到的怎么维护这个过程。后来发现其实不用维护这个过程,我们最后的目的就是把下标一一对应就好,那么其实就是算把数组变成上升数组要移动多少次,这个也就是求逆序对,所以用线段树求个逆序对就得到答案了。int a

2021-11-09 17:30:18 617

原创 2021ccpc网络赛选拔赛补题

这次网络赛真是一言难尽,hdoj不说,自己也是大脑空白,再加上眼睛巨难受,划水五小时,被队友代躺。1002 Time-division Multiplexing题目思路赛中有演员告诉我1到12的gcd是4e8,我直接懵逼,不知道咋搞。。。幸好另一个队友过了。思路其实就是暴力,n个串每个串长度不大于12,那么我们暴力模拟出结合后的串的循环节就好了。这个循环节的长度其实就是所有串长度的lcm乘上串的个数。1到12的gcd是27720,所以循环节长度最大到n*27720。我们暴力模拟出串的长度后,用双指

2021-08-29 17:14:11 901 4

原创 Codeforces Round #702 (Div. 3) G. Old Floppy Drive

题目大意给出一个长度为n的数组a,每个位置可以为负。m次询问,对于a数组从左往右,循环累加,要加多少次才能让总值不小于b[i]题目思路为了方便计算我们需要一个关于a数组前缀的单调数组。因为a数组中可能存在负数,所以他的前缀和不一定单调。我们假设第i个数是负数,第i-1个数是正数,那么我们对于前i个数,我们一定是从1选到i-1优于1选到i。那么对于每个i我们统计从1到i里面的前缀和最大值。之后就是分类讨论。当数组最大的前缀值大于等于b[i],那么说明循环一次就能找到答案,我们直接用二分函数求答

2021-08-24 16:30:27 117

原创 Count on a tree SPOJ - COT(LCA+主席树)

Count on a tree SPOJ - COT题目意思给出一颗树,每个结点有一个值,求两节点之间第k小的值是谁题目思路一开始看到要两个结点之间的问题,准备用树链剖分,然后dfs序建主席树,但是想了一会发现这样建树之后,树链剖分的方法不好找到一个连续的区间来求第k小,多个区间也不晓得咋转移啥的,于是这个思路搁置。后来发现思维被框在dfs序和普通树里面了。因为主席树跟普通树区别是很大的,对于主席树我们每次建一棵树是可以任意选择连接哪一颗树的,并不是只能连接前一个树。所以我们可以在遍历储存数据

2021-08-20 17:14:12 130

原创 Codeforces Round #739 (Div. 3)E

E、Polycarp and String Transformation题目意思有一个字符串s,我们每次选择串上的一种字母,然后将它从s上全部删除掉,再将删除后的s串加在原串的右边构成串t。现给出串t,输出字符串s最开始的样子还有按删除顺序输出字母题目思路因为每种字母删除之后它就不会再出现了,所以我们可以直接找每个数字最后出现的位置,越后面删除的字母一定最后出现的位置也一定最晚,这样我们就找到了字母删除的顺序。然后我们根据题目可以发现其实t串可以分成很多段,这些段就是我们加入的那些s串,段的个数就

2021-08-19 20:28:11 76

原创 [kuangbin]树链剖分

Aragorn’s Story HDU - 3966题目链接https://vjudge.net/problem/HDU-3966题目思路模板题ac代码const int maxn = 5e4+10;const int inf = 1e9+10;const ll llinf =1e18+10;const ll mod = 1e9+7;const double pi = acos(-1);int n,m,p;vector<int>vec[maxn];int a[max

2021-08-18 20:12:47 95

原创 2021牛客暑期多校训练营9 E Eyjafjalla

题目意思给出一个树,每个节点有一个温度,并且规定父亲结点温度一定大于儿子节点。给出一个温度区间[l,r]和操作的点x,如果点x温度在该区间中,那么将该点加入集合,并且判断x的相邻结点是否满足该条件,问最终集合中元素能有多少个。题目思路由于题目条件非常明确的告诉了我们祖先节点温度会大于子孙节点,我们发现对于一个点y向下找满足条件的点时,只需要找他的子树上有多少个点的温度大于l就好了。那么我们对于每次询问可以先找到x的深度最小的温度小于r的祖先节点a,然后我们只要找出a结点的子树上有多少个点温度是大于

2021-08-17 20:20:50 130 1

原创 Codeforces Round #722 (Div. 1) C(dfs序+树状数组)&& 2021牛客多校第七场F-xay loves trees

Codeforces Round #722 (Div. 1) C题目思路题目给了两个条件:1.集合中任意两个数在第一颗树中任意一点为另一点的祖先2.集合中任意两个数在第一棵树中互不为祖先对于第二个条件,我们可以用dfs序来判断,如果两点的覆盖的区间不存在重复,那么他们一定不互为祖先。又根据条件一我们可以发现这些点一定在第一棵树的同一条链上,所以我们可以先将第二棵树的dfs序求出来,在遍历第一棵树来求解。我们用树状数组来维护已被覆盖的区间的信息。当我们遍历到一个新的点x时,我们先查询它在d

2021-08-11 21:21:29 78

原创 Codeforces Round #737 (Div. 2)D - Ezzat and Grid (线段树+dp)

题目思路这题我们要得到最少被删除的边,即剩下的边最大,我们可以考虑dp求解。dp[i]表示以第i行为末尾,有几条边未被删除。那么我们的转移方程很简单就是dp[i]=max(dp[i],dp[j]+1),j<idp[i]=max(dp[i],dp[j]+1),j<idp[i]=max(dp[i],dp[j]+1),j<i并且第j行和第i行有一列都有1。我们现在的问题就变成了如何处理行与行之间的关系。根据题目的输入我们知道每次操作是一个区间的覆盖,那么我们考虑用线段树维护行之间的关系

2021-08-11 19:45:37 110

原创 hdu6692 Lawn of the Dead(线段树)

题目思路因为每次只能向下和向右走,那么我们判断一个点是否能够到达就去判断它左边和上面是否都无法到达就好了。我们将k个无法走到的点排序后,分开处理每一行的情况。如果我们枚举到了第i层,他的第j个位置是无法走到的,那么我们需要找到的就是第i-1层中从j+1位置开始第一个可以走到的点。我们处理情况需要用到的就是区间修改和区间查询ac代码// A code blockvar foo = 'bar';...

2021-08-04 09:29:48 77

原创 暑训记录8.1

早上补了下昨天那场牛客的概率题。。看了好久才看明白然后在补cf的e题中间还有查寝小分队(其实就是想摸鱼来看看别人在不在摸鱼)来看我们在不在摸鱼。。下午放风

2021-08-02 09:50:19 62

原创 暑训记录7.31

大清早就听说学校附近出了一例确诊。。。然后早上线段树板子敲完,就有阿姨来赶人。。说要封楼了于是收拾东西回寝室了。。。下午在寝室写了没多久多校就开始摸鱼了晚上补题

2021-07-31 20:23:57 46

原创 暑训记录7.30

早上补了下昨晚上的div2感觉题目都是思维题,有思路码起来很轻松,但是没思路就一直卡死补完了前四题。做了下qc给的dp题,一开始没太明白题意,懂了之后思路出的还挺快的下午下午花了两小时写了个单调栈的题。。。码起来还是不熟练Codeforces Global Round 15 D. Array Differentiation题目思路根据题目我们发现数组b中n个数至少能够确定n-1个a数组的值所以如果存在ai+……+aj==ak+……ata_i+……+a_j==a_k+……a_tai​+…

2021-07-30 17:14:54 70

原创 暑训记录7.29

早上写了套div2,4题下训。。下午多校三题签完到开始挂机,后面的题目基本都写不动。。。。这两场hdu好像都是这样。。。不过这场三题都是队友写的,开始挂机之后我还在调签到的bug晚上有点不想补这场的题了。。。题解都看得费劲。。。新东西又学不动,题也补不动去不了下上会那个掉大分的div3...

2021-07-29 20:48:25 66

原创 暑训记录7.28

昨晚回去还准备调回bug,结果不到一分钟就调完了,交了下,过了。。。白带电脑了早上今天没有多校,开始痛苦补题。

2021-07-28 10:00:53 72

原创 暑训记录7.27

早上花了一个小时搞明白昨天那场牛客的j题,二分check里的操作总是想不到,感觉这题的check也挺巧妙的,或者说是我太菜了这也想不到。。。

2021-07-27 20:16:16 54

原创 2021牛客多校第四场补题

J.Average题目思路我们根据题目给出的条件可以推出最后的值应该等于sumax+sumby\frac{sum_a}{x}+\frac{sum_b}{y}xsuma​​+ysumb​​问题就变成了a数组上找一个长度不小于x的区间最大平均值加上b数组上找一个长度不小于y的区间最大平均值考虑二分平均值求解。每次check,先将数组前缀和求出,然后枚举右端点i,并且维护左端点j,保证j<=i-x,并且前缀和最小,最后判断sum[i]-sum[j]的值是否大于等于0。ac代码int n,m,

2021-07-27 10:10:51 175

原创 暑训记录7.26

早上补玩了牛客第三场的b题,卡空间还搞了一会,好像之前都没怎么学prim算法,板子都用的很头疼。然后开始写模拟,一直写到下早训

2021-07-26 21:30:51 60

原创 2021牛客暑期多校训练营3补题

B.Black and white题目思路题目给出条件,(i,j),(i+1,j),(i,j+1),(i+1,j+1)中三个点被覆盖后第四个点也一定的覆盖是不需要花费的。我们将横坐标和纵坐标看作端点来建边。假设(i,j),(i+1,j),(i,j+1)被覆盖,那么有Ai<−>BjA_i<->B_jAi​<−>Bj​,Ai+1<−>BjA_{i+1}<->B_jAi+1​<−>Bj​,Ai<−>Bj+1A_i<-

2021-07-26 10:01:29 85

原创 暑训记录7.25

早上补了下之前那场div3看了下昨天多校的录播oi选手讲题真的挺抽象的。。。下午每周放风时间

2021-07-25 11:03:08 51

原创 暑训记录7.24

早上早上终于把前天cf的f题 过了,bug半个小时就调完了,果然还是要睡醒写代码,虽然现在也挺困的。

2021-07-24 12:05:51 58

原创 2021杭电多校第二场补题

1008 I love exam题目思路先将每个学科分开,看作单个背包,算出每个背包各个容量下的最大价值,主要要保证分数不能超过100。然后我们需要将各学科合并。令dp[i][t][z]表示前i门学课花费t时间挂科数目位z的最大价值总和,f[i][j]表示第i门学科花费j时间的最大价值。因为存在挂不挂科的情况,所以我们合并时要判断f[i][j]是否大于等于60。当大于60并且当前挂科的数目大于0时我们的递推式就是dp[i][t][z]=max(dp[i−1][t−j][z−1]+f[i][j])

2021-07-23 17:01:09 188

原创 Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) E.F

Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) E. Permutation Shift题目大意对于一个长度为n从1到n的序列a,我们可以将它向右移动k位,例:[1,2,3,4,5]右移2位后得到[4,5,1,2,3]给出一个操作,选择i,j,交换序列中a[i]和a[j]的值。现在给出一个序列b,问能否通过最多m次操作后,将b变成序列a移动k位后的序列题目思路根据偏移可

2021-07-23 16:21:09 102

原创 暑训记录7.23

早上起来一看又上了60分,舒服了。qcb题还被fst了,笑死。花了一个小时才弄明白e题的思路,感觉挺巧妙地,cbb也tqlHarbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) E. Permutation Shift题目大意对于一个长度为n从1到n的序列a,我们可以将它向右移动k位,例:[1,2,3,4,5]右移2位后得到[4,5,1,2,3]给出一个操作,选择i,j,交换

2021-07-23 11:09:47 82

原创 暑训记录7.22

早上看了一早上的牛客第二长的L题,大致理解思路,代码码了一半下午自闭hdu,签完到罚坐L题照着别人借法写,但是一直过不了晚上补hdu题目

2021-07-22 19:06:57 43

原创 2021牛客暑期多校训练营1、2补题

2021牛客暑期多校训练营1 G.Game of Swapping Numbers题目意思给出一个数组a,b,有k次操作,每次可以交换a数组的第i位,第j位,问ai减去bi的绝对值的总和是多少题目思路建议看这个博客讲的很清楚https://blog.nowcoder.net/n/9a7e2218973e49c6ba710edf4e116035?f=commentac代码int n, m, k;ll a[maxn],b[maxn];ll mi[maxn],ma[maxn];bool cm

2021-07-21 14:42:32 175

原创 暑训记录7.21

早上花了一个小补完了牛客第一场的g题2021牛客暑期多校训练营1 G.Game of Swapping Numbers题目意思给出一个数组a,b,有k次操作,每次可以交换a数组的第i位,第j位,问ai减去bi的绝对值的总和是多少题目思路建议看这个博客讲的很清楚https://blog.nowcoder.net/n/9a7e2218973e49c6ba710edf4e116035?f=commentac代码int n, m, k;ll a[maxn],b[maxn];ll mi[maxn

2021-07-21 14:36:17 87

原创 2021杭电多校第一场补题

1006 Xor sum题目意思给出一个长度为n的数组,和一个数k,问异或和不小于k的连续子序列最短是谁题目思路我们要求的是区间[l,r]的异或和为k,那么我们可以将它分解成区间[1,l-1]和区间[1,r]的异或值。那么我们就可以枚举右端点r,将1到r-1的前缀异或和都放进字典树。我们每次放入一个新的异或和时,我们沿着路径涂上这个新异或和的右端点。我们在查找时,取出k的当前二进制位和[1,r]异或和的当前二进制位。如果k的当前位为0,那么我们要往字典树上与[1,r]异或和的当前位值相同的方

2021-07-20 22:16:28 308 6

原创 暑训记录7.20

早上Edu104 C. Minimum Ties题目思路看完题目就觉得是个找规律的题目。根据题目意思可以知道每个队都有n-1次比赛机会。我们先分成奇偶两种情况。奇数情况时,每个队的比赛机会都为偶数,我们平衡一下,让他n/2的机会是赢,剩下的是输就好了。偶数情况下也类似,每个队的比赛机会为奇数,我们加入一个平局后,剩下的机会就变成偶数了,同样也是一半赢一半输ac代码int main(){ int _; scanf("%d",&_); while(_--)

2021-07-20 10:31:33 58

原创 暑训记录7.19

早上终于把前天cf的d题补完了。cf733 D.Secret Santa题目思路我们用b数组储存操作后的数组。我们用vector储存每个a[i]出现的位置,并且令b[i]=vector[a[i]][0]。然后我们用数组储存没有出现过的数。之后我们遍历b数组,如果b[i]==0,我们将队列头部赋值给b[i]。如果这是b[i]等于队列头部的值x,那么我们把b[i]=a[i],a[i]原本来的位置等于x,这样下来两个位置都不会存在相同的情况,并且不会减少b[i]==a[i]的情况数ac代码int n;

2021-07-19 10:20:50 63

原创 暑训记录7.18

昨晚cf打的人想死,有点想呕又有点头晕,整个人就不在状态,被b题初始化卡半个多小时,又被c题二分卡了半个多小时,最后调完c被zw抬了一手,rank又稀里糊涂的到了1900早上先补下昨天的d题网络流24题目前施工进度:7/24下午周天下午晚上放风...

2021-07-18 10:44:39 50

原创 暑训记录7.17

早上早上就写了一道cf题,开始题目都没完全明白…感觉不怎么在状态Educational Codeforces Round 106 (Rated for Div. 2) C. Minimum Grid Path题目链接https://codeforces.ml/contest/1499/problem/C题目思路根据题目要求我们假设先向右走再向上走。我们从(0,0)到(n,n)向上和向右的移动次数都为n,我们按奇数和偶数分为两个数组,一个是向右走的时间的花费,一个是向上的。我们要求最小花费

2021-07-18 09:02:06 95

原创 暑训记录7.16

早上早上先补下昨晚晚训的c,然后去写网络流吧Skyscraper Gym - 102220H题目大意给出一个数组,每个位置有值ai,我们每次操作可以将任意l到r区间每个值减一。有两个事件:1.将区间l到r的所有数加12.输入将l到r区间每个值减为0的最小操作数题目思路我们考虑第二个事件:对于l到r区间,第一个位置需要ai次操作,清除第一个位置后,第二个位置需要的操作数就是max(0,a[1]-a[2])……第i个位置就是max(0,a[i-1]-a[i])。那么每个位置的值就可以表示为m

2021-07-16 19:32:02 63

原创 网络流学习记录

基本概念源点:网络流的起点,流量无限汇点:网络流的终点增广路:是从源点到汇点的一条路径,其上所有边的残余容量均大于0,流量等于增广路上所有边的流量最小值反向边:流向相反的边,初值位0,正边减少值时,反向边增加相同大小的值,提供撤销功能Ford-Fulkerson算法:用dfs找出存在的增广路,并维护答案Edmond-Karp算法:用bfs找出存在的增广路,并维护答案多路增广:即dfs找到一个增广路时向上回溯,当当前点还有边的容量不为0并且流量还有剩余就继续向下递归当前弧优化:我们跑到一个节点

2021-07-16 11:35:38 323

原创 暑训记录7.15

昨晚cf打到12点半,被yy哥哥带飞,又能上分了嘿嘿早上昨天晚上补集训队oj上面的字典树题,wa到想死,今天早上想补网站还挂了。 。。cf710 Div. 3 E. Restoring the Permutation题目大意给出一个长度为n的数组,ai表示前i个值里面的最大值,要求将数组还原成长度为n并且符合数组限制的排列,输出字典序最小的排列和最大的排列题目思路我们很容易就能发现当a[i]>a[i-1]时,i位置放的一定是a[i]。根据这个结论我们可以确定一部分位置的值,这些位置的值

2021-07-15 14:24:34 75

原创 csustoj p4001 你真的会加法吗?(字典树)

题目链接http://acm.csust.edu.cn/problem/4001题目思路题目要求每个数位上相加不进位,用模k后值代替 ,并且数字长度最长为10位。我们考虑用字典树求解。因为数字含有前导零,并且我们知道他的最大长度。我们将数字看作一个字符串,长度不够十位,就在数字前面补0。之后我们将这个字符串插入字典树。然后我们查询的方式类似01字典树。也是先把数字变成长度为十的字符串,然后放入字典树查找。从第一位开始比较,应为我们要找的是最大值,所以我们从k-该为数字值开始想下找,如果能

2021-07-15 11:44:05 85

原创 暑训记录7.14

昨晚的晚训调bug调到死终于过样例了结果一直wa2,心累今天上午补补题,下午坐下字典树的题。早上先把昨天晚训的c题调完吧Gym_102220B Balanced Diet(stl+枚举)题目大意现有n个糖分别属于m种糖的类型,每个糖有一个甜度值和类型值。我们现在来取糖,对于第i种糖,如果要选取,那么至少要拿l[i]颗这种类型的糖S表示我们选取的所有糖的甜度值和,C表示每种类型选取糖的数量的最大值,比如第一种选2颗,第二种选3颗,第三种选2颗,那么C为3问S/C的最大值(S和C的gcd为

2021-07-14 16:32:52 88

原创 暑训记录7.13

今天是暑训第一天,准备每天记录一下自己干了什么,督促自己不摸鱼早上早上找了点cf的题目复健一下。cf732 div2 C. AquaMoon and Strange Sort题目大意给出一个长度为n的数组,每个位置一个ai值表示大小和一个方向值,方向值最开始都为R。每次选取相邻的两个数调换位置,并且方向值取反(L变R,R变L)。问能否让最后的数组不递减并且所有方向值都为R。题目思路其实我们很容易就会发现一个数移动偶数个格子那么他的方向值一定会变回原来的值。题目要求数组不递减,所以我们肯定

2021-07-13 11:46:58 73

原创 线段树专题刷题总结

C - Infinite Inversions离散化 对于两个点之间还有区间的情况 我们也需要通过离散化缩成一个点并且存下区间的长度D - Physical Education Lessons这题写了一下午 人都快傻了具体操作跟前一题差不多离散化后建树 但是如果用map存区间长度会t 这里卡了好久不过上一题是直接查点 这里应为是修改区间 可以在存完长度后用一个前缀和来方便之后的计算这种需要多存区间的题 要多开点空间还有动态开点的写法 晚点在写...

2021-05-09 16:58:28 131

原创 洛谷 P2824 [HEOI2016/TJOI2016]排序 (二分答案+线段树维护)

题目意思给一个1到n的序列定义两种操作将区间l到r升序排列将区间l到r降序排列最后问第x个位置上是什么数题目思路这题的解法真的是很妙 我是怎么也想不到要用上二分首先我们考虑只有0和1的数组 我们对它做相同的操作每次对l到r区间做操作 这个区间一定会变成一边是1一边是0所以我们只需要每次查询区间1的和然后将一部分赋值1 一部分赋值0 这样就完成了我们要的操作然后对于这题 因为我们要求的只是最后某个位置上是什么数所以我们二分x上的数 我们令大于等于x的数为1 其余为0然后建数 做我们

2021-04-21 23:39:33 88

空空如也

空空如也

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

TA关注的人

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