退役了,总结的ACM近年区域赛的所有题型

前面的是退役小记,后面是我个人写近2年所有区域赛场次记录的题型(请忽略我记录的感受),可以留着看下最近的场次名称和原题在哪里有

目录

退役小记(没兴趣可以不看)

这里简单记下我的acm生涯

省赛和三场区域赛

为什么能有点成绩

近年区域赛总结

总:

经验:

突破口:

错的经验:

以后:

        题型:

思维题:

构造题:

概率题:


退役小记(没兴趣可以不看)

本人大学是接近一本线的二本大学,目前能打的区域赛场基本打完了,桂林rank105和沈阳rank140是有两个区域赛铜。

这里简单记下我的acm生涯

其实我一直觉得对于我们这种弱校,虽然打acm,但是不一定算是合格的acm选手,因为如果每场每个学校多1个名额,对我们弱校就是灭顶之灾。21年的icpc就是我校学长基本全军覆没,我们也是在22年icpc名额大减的背景下勉强2铜

我本人打acm挺晚的,是大一下4月开始正式学算法,开始去学第一个算法前缀和,当然这不代表我校acm经验和训练强度不够,相反这些都是很不错的。当时有军训,身体也好,又有暑假集训,还没有学长0收货的消息,所以我到暑假假期结束时,基本学的算法就跟上了

然后大二上开学,学长说要打10场看总成绩去踢人,我们这届最强的2个只参加了一半的场(也就是后面我俩队友),我勉强比第二高一点。后面是昆明选拔组队名额,应该是我开翻译的原因,两场成绩是第一,那之后再也没有单人周赛了。当年给我来acm机会学长说的是,超过我的一个队友才允许我加入,虽然应该是希望我更有追求,但是至今我也不知道算不算超过

后面就是我们三个组队暑假集训,生活过的挺惬意,但是牛客多校越打越烂,来了后也是有点勉强超过我们这边的二队,算我们这边的一队,打区域赛的机会才多些。

省赛和三场区域赛

省赛我们是正式第4名,前面我们做的挺顺的,只是最后的时候有一个线段树的题,还有一个大模拟。我们做的是大模拟,虽然那个线段树是我们有大概的思路,但就那题的难度来说也不过是冰山一角。

桂林场是我比较快的A第四题,实际这题应该没多难,然后队友A了第三题,时间比较快,算是有了一个铜,这个可能是最简单的场了

沈阳第二题过的慢,第三题发现就是类似于模拟的东西,这题出了后,实际上到最后还是没有。于是有大量的时间去看第4题,一屏幕放的都是暴力出来的规律,最后出了思路变成了求一个公式,队友会O(n)的写法,WA了几发,调到最后7分钟过了

第三场绵阳,以为会是简单的,结果难度和广州差不多。第3题那个构造开始想的是简单图形,横着的直线也想了,后面想的很麻烦,然后浪费了巨多时间,结果答案是可以斜着直线就行。第4题出了时间也不行了。其实第3题哪怕想一下斜线,这场50%的概率还是有的,没有我们也没有太难受,2个已经是很难得了

为什么能有点成绩

其实最重要的原因是一个队友解中等难度题的能力暴增,使得桂林和沈阳都是中等题翻身,绵阳也是他是主力,其次就是今年acm的icpc名额缩减,ccpc扎堆严重(我们分别打了简单和难的场)


我之前的时候很喜欢看别人退役文章或者自己的acm故事,希望有天和那些学长一样强。那时候最崇拜的就是计科大佬和acm大佬,后面我转专业和打acm,也算是有了这两个身份

近年区域赛总结

主要就是2020年,2021年icpc和ccpc大多场次的银之前的题的题型,可以自己看下区域赛常考的的题的类型,当然自己也可以总结下22年的题型。

一、22年昆明(牛客,ICPC)


https://ac.nowcoder.com/acm/contest/32708

K:    第一题是精度的问题,完成速度0.4,long long和double应该就行了,尽量先乘后除
类型:精度

D:    构造题,几乎不会有不行的情况,往往是2幂数的和或者多乘数的和。
类型:构造(*)

F:    公式化简就是(a*a)/4,a是树链最大的平均值,树链长度最小为2。所以树链的长度一定<=3,树形DP求最大值最小值即可
类型:思维+树形DP(*)

---
G:在最前的概率是f[i],无限次移动后一次的移动期望。两两比较,
类型:概率期望(银)

二、22年澳门(牛客,ICPC)


https://ac.nowcoder.com/acm/contest/31454

A:    思维题,不难想到一条路或者反过来一定可以的,但是细节怎么就那么差呢?一直WA,1是没有初始化,2是没有严格按照题意
类型:思维题

L:    dfs搜索题,能想到前面的优先,样例又是看不懂,明白后通过并查集和dfs实现了这个功能,有段错误
类型:dfs+并查集(但毕竟是签到题)

F:    数学题,需要想到一定的结果,然后去用优先队列找最大的处理,也就是只需要动n次,多的无效
类型:数学题(*)

三、2020南京(牛客,ICPC)(这场*)


https://ac.nowcoder.com/acm/contest/10272

K:    构造题,也是签到的,大概能想到,多写一定没错的
类型:构造

L:    思维题,坐标多点取中间值。要想到只是中间的就是答案,实现起来麻烦点,回头看下题解,一定有更好的办法,细枝末节什么的
类型:思维题

E:    构造题,想全情况很重要,慢点也是死。别把思维惯性化,有点东西是错的还是直接用。
类型:    构造题

F:        三分概率最优点前n项和,尽量别单独优化,WAT3发,就想方法吧,等比等差前n项和能不能记住?double long什么的还是别了
类型:概率题(*)

M:    树形背包DP,难度算练后的0.7,卡时间这个太难了,也许是之前没了解过这个枚举的模板,至少是纯的算法题目,有的话尽量不浪费队友时间去手推。
类型:树形背包DP(银)

四、20年上海(牛客,ICPC)(这场学长*)


https://ac.nowcoder.com/acm/contest/9925

F:        计数题思维题,毕竟是签到的
类型:思维

M:        思维,类似字典树,实际可以通过前缀下标标记,太难了
类型:思维,字典树思想(可能用不上)
    
B:    思维题,扫雷那题,核心是反过来数值和是不变的,然后就是一半,正着不行反着行的思路。
类型:思维

D:    0-n的一维坐标,两点公共走完所有要的最少时间。一是思路,其实还行,二是返回max(a的时间,b的时间),精度不一定是类型,公式,还有过程运算。三是很多符号,名字尽量别搞一样的。
类型:思维题(*)

---
C:好像是一个二维的数位DP,加上公式的小化简,log2(a)(下取整)+1就是二进制最前后一个1的位置(依对数位DP说)
类型:数位DP(金)

五、19年南京(vj,ICPC)


https://vjudge.d0j1a1701.cc/contest/478696#problem/K

A:    规律题,所有字串有一个因数对,答案是(n+1)/2+1,还是浪费了一点时间。
类型:规律题

C:    动态规划,二维数组,求递增长路径数量。答案不是pow(2,n),dfs过于麻烦,只能是动态规划了,依据特别的题意来分析代码细节。
类型:二维数组动态规划

H:    思维题,a个支持,b个反对,c个中立。看起来很不好的一题,如果题意能再确定下,最后的答案一定是很合理的,想到的尽量都用上。可以试着记录一些答案
这题如果真有,肯定能过,主要还是K题。两个算法题才是关键。
类型:思维题

K:    计算几何,一个三角形分为面试相同两部分,大致能写出来,就是WA,应该是细节或者某些情况。
类型:计算几何(*)

J:    一个用的不多的算法,KM算法,记录下好了
类型:KM算法(银,图论二分图匹配中的)

六、20年澳门(vj,ICPC)


https://vjudge.d0j1a1701.cc/contest/500784#rank

L:    概率的题,a数组随机1/n,p数组全排列,pi<ai的数学期望。题意似乎是最难的,答案不难,**打印为那个<1e-9是前9位一样即可**
类型:概率题

D:    模拟题,ATK,ATK暴击率....,公式计算结果。最重要的是题意要看懂,细节的问题,然后就是非常**简单的模拟公式**。
类型:简单模拟

F:    构造题,n点连接d点c个联通块的构造。思路还是比较简单的,实现起来是不是太奇怪了,也算模拟题了
类型:构造+模拟

A:    概率题,分治+NTT。an(an-1*(....(a1v+a1)+a2...)+an-1)+an。公式无法继续化简。是用算法分治+NTT。
类型:分治+FFT。(*)

G:    难的的正常点的题,博弈+思维。只能向后面二进制位数相差不超过1的数走。**只记录最后数的位置,前面的一定是可以赢**,后面的255次博弈判断。每次可以用sort排出q数组。
类型:博弈+思维(*)


八、21年威海(CCPC)(rank86软件*)


https://vjudge.d0j1a1701.cc/contest/501844#overview

A:    给一个树问多少顶点为树根,他是个二叉树。输入不低于2e6用read输入。
类型:简单树题

J:    边角型的题,在一个圆中反弹多次,最少多少次回到原点。核心是相对于原点是不停+a/b度的。
类型:图形度数计算

D:    简单哈希匹配,第i个变成#,求前缀中和后缀中相等的数量,和字符串的循环没有关系。
类型:    字符串哈希(二分哈希可能卡时间)

G:    read也许重要,会有卡时间的,模板也要时间好点。n个数分给k个有多少分法。限制是sum(a[i])<1e5,那么不一样的数量最多就是sqrt(1e5),是这题的核心。
类型:组合数+思维(*)

H:    一个树选n点使用一定权值,每个点最近得到p个都选了可以得到v[p]。图论的题还是要学的。
类型:网络流->最小割(*)

M:    长度为n的01串m个1,1的最大连续是k。求出大于等于k的种类数,剪去大于等于k-1的种类数就是答案。具体求是利用插空法,将n+1(m+(n-m+1))个1摆放在一起,让n-m个挡板去插空,最后利用容斥减去多出的情况。
**特殊判断错了**,res要+1错了
类型:容斥+组合数


九、21年桂林站(CCPC)(rank187学长)


https://vjudge.d0j1a1701.cc/contest/502492#overview

A:    打比赛第x天前输,后赢,赢n+1可以赢。结果就是2*x-1,注意long long,确实注意了但没看到2*1e9。
类型:简单签到

I:    01串,1可以匹配前面一个0或者1,权值+上1的位置最大。从后往前遍历,有的+起来,有1就用了。
类型:简单签到

G:    01串中的1一个个蔓延,花费的最少时间。可以二分的,状态有点多,dp也是可以,有点麻烦和浪费时间,区域赛是有二分题的。
类型:二分(主)、动态规划

E:    一个买边,一个卖边,每轮卖的不能成环,卖完最少的轮数。有边就是1,有环就是2,没边是0。用堆优化的dijkstra算法找出最小环。
类型:图论:堆优化的dijkstra算法求最小环(*)

D:    一个1-n数组可以再前大后小的时候交换,能不能到的另一个b数组。cf的思维题,思路就是从最小的开始往前走,挨个判断比当前数大的位置是否合适,合适就交换。
类型:cf思维题(*)

21年沈阳(ICPC)


https://ac.nowcoder.com/acm/contest/36975#description

E:    简单签到。看一个字符串中有多少“edgnb”。注意后面的访问下标别超
类型:简单签到

F:    给一个字符串,字母映射为最后的该字符后的不同字母数量,找最大前缀。注意数据范围,可sort排序暴力,一是题意,二是实现要快点。
类型:简单字符串

B:**这题也许卡了很多,最重要的是1-n的图不一定都是连接的**。给一些边表示两顶点权的异或,求最小的和。利用异或的性质,求出所有点对于联通图某点的异或值,再利用每位1和0的数量来选择该点的答案,最后加起来。
类型:**理解题意**(二进制异或+思维,带权并查集(*))

J:    4位锁翻转到另一个锁。首先要会将差数组转为全0最少步骤数,就是洛谷把题,实际自己搞单调栈应该也可以。然后2^4或者3^4枚举数组判断结果
类型:**理解题意**(数组单调栈(局部),bfs(*))

H:    给定一个无向带权图,将其所有的 边看作点,点看作边 构建出新图也是一个无向带权图(两点之间的边权为这两点的权值(原边权)相加),求这个新图上的最大独立边集 —— 选取所有 不相邻 的边构成的集合保证权值累加 Max。
类型:并查集(*)

L:    一个完全图,给一个树让完全图减去,有多少种最大匹配。图论问题。
类型:树形DP+容斥(题意涉及二分图最大匹配)(银)

M:求后缀最大的字典序
类型:后缀树(字符串算法)(银)


21年哈尔滨(CCPC)(软件两队rank230+差不少)


https://vjudge.d0j1a1701.cc/contest/502821#overview

J:    二维数组预处理最小行和最小列,找<=该行该列的元素个数。
类型:简单签到

B:    一个数组,两个数和等于某个数可以组一队,问租多少队。
类型:简单枚举判断

E:    2^(i-1)对一个数取余,能不能是某个数组。这个数一定是不是1,2,3,8,16...第一个数和后面的数中的一个,注意细节,过程尽量按照过程来写。
类型:思维

I:    每次可以删除1,2,4,8...,下标可以是同一个数。将所有数分为1,2,4,8,16,32....的数量,后者可以换成2个前者,那么可以while(1)不停的换,也可以二分来换,同样有(a-b-1)/3的细节问题。
类型:**理解题意**(二进制)(*)

D:    两个正整数同时删除一些相同的数,问能不能之间的比不变,且变化后最小。纯暴力搜索题目,枚举2^18种情况,根据题意进行判断,利用x/gcd(x,y)和y/gcd(x,y)两个数大大降低时间复杂度。题意是删除一些同样的数位,还有顺序要考虑
类型:纯暴力判断(*)

---
G:    n点m边,有的点有自行车,自行车有损坏的概率,从1到n最小时间。
类型:状态DP、最短路(银)


21年广州站(CCPC)


https://vjudge.d0j1a1701.cc/contest/494718#overview

**这场不是正常场,北大出题**

I:    1-n的全排列,前i项和都要被i整除,问多少种排列
答案是3*qpow(2,n-2),这样以后也可以试试最后的答案
类型:排列数量

H:    给a,b,c,找x%y==a,y%z==b,z%x==c的x,y,z。对的思路大概是x=w*a...找一个合适的W,会接近1e18,也就是进一步理解这个式子
类型:思维题

C:    给一个圆形的项链点,分成m块,每块一个项链点。首先二分答案,思路就是往右边为最优,然后计算左边最多能省出多少个,这个很难实现,题解不多。
类型:二分(*)(不简单)


21年上海(牛客,ICPC)(学长rank229差一点)


https://ac.nowcoder.com/acm/contest/24872#description(牛客)
https://vjudge.d0j1a1701.cc/contest/503555#overview(vj)

E:    给一个数组和,选一些数要求所有的数差<=k。贪心从小到大选,只是第一个一定是最小的,减1e9的话可能会超定义的值
类型:简单贪心

D:    给p,q,找出a,b使得a/b+b/a=p/q。使k=a/b,变数变为一个,a和b为整数,那么k不能有根号,最后输出k的比值即可
类型:数学

G:    一个树,每队拥有两个同顶点的边,多少种组队方法。首先考虑两层的树,得出同根树数量的数组。如果子树数量为奇,那么一定往上面借一个,下面是(a+1)/2。
类型:思维

I:    点数和权值,点数可以乘2,后找出两队点数和相等,使总权值和最大。
类型:背包DP

H:    给双边图,1e5次询问某点某权值开始,权值大于边可走,每走一点加权值,能走多少权值。首先考虑最小生成树,图则将完全变为树,然后是这个重构树。
类型:图论的重构树(*)(但是有点偏模板)

偏的算法总是不难,却有点偏

21年济南(ICPC,牛客,应该是这场,290+)

K:    树中等概率有一点,到达该点花费时间期望。自己做法好像有点麻烦了,好像是欧拉序。只要是深搜答案都是一样的
类型:DFS,欧拉遍历

C:    数组两人选数,多少种全排列选法使最后结果仍是最优。答案是数组转化统计数组,累成q[i]!*C(q[i]/2+sum,q[i]/2),sum是从大到小取,前面小的数量。
类型:组合数学(*)

D:    对一个数组拟合等差数列,求最小的绝对值差和。三分枚举等差d,然后利用货仓选址模型O(n)时间求出中位数,总时间复杂度O(2*log3(n)*n)。然后还卡了__int128。
类型:三分(银)

21年南京站,收尾的那场(ICPC)(靳300)


https://vjudge.d0j1a1701.cc/contest/494747#problem/H

A:    矩形每个点都有,整体移动使全部在指定点,需要找到最近角点。
类型:简单构造

M:    一个数组,可以前点-后点,结果插入该相邻的前点位置(1和n也算相邻)。可以直接算答案的,确实不好整,思维+样例+答案,最好一思维为主
类型:cf思维、数组

C:    给一个数组,区间加上指定值,求同种的最多多少个。问题拆分
比如:0 1 0 1 0 1 1,翻转一个区间,使1最多,需要找出0数量比1最多的区间,sum1+**结果**就是最多种类数
**怎么找这个结果呢**,1 -1 1 -1 1 -1 -1,动态规划最大和区间,或者前缀和最大减最小。
后者有点麻烦,需要储存遍历+很多优化,但是可以过
前者只需记录最大的前缀和即可,每次直接+sum1进行更新
还有一个核心就是:2只影响了2和2+k两个数
类型:数组(问题拆分->简单动态规划最大区域和)

H:    以后可做
类型:树形DP(*)

七、20年秦皇岛(一)(vj,CCPC)(344)(题号有误)


https://vjudge.d0j1a1701.cc/contest/467417#rank

A:    简单签到题。a白b黑选2全白。利用**组合数C**的运算,化简即可。
类型:简单数学

F:    正整数x是好的当且仅当可以整除(int)pow(x,1/m)。还是很正常的题,最重要的是**理解过程**,考虑到时间复杂度。
类型:统计题+局部前缀和(一个区间中被x整除的数量)

E:    思维题吧。n点m边选若干个点,按规律算最大权值。一个连通块肯定全选,if+max(0,(res/2-ans))
类型:思维+dfs搜索

K: 树形DP。可以从1出发多个,问走完最少花费时间。树形DP解法。dp[d][0]表示不返回,dp[d][1]表示返回的
```
  if(dp[son][0]+h[d]+1<dp[son][1]+2){
         dp[d][0]=max(dp[d][0],h[d]);
  }else{
         dp[d][0]=max(dp[d][0],dp[son][1]-dp[son][0]+1);
  }
  dp[d][1]+=min(dp[son][0]+h[d]+1,dp[son][1]+2);

dp[d][0]=(dp[d][1]-dp[d][0]);
```
类型:树形DP(*)

D:    思维题,每个人高分或者低分,不低于最高分*(m/100)的人数最多。最高为最高分时,其他都要最高,排序查找答案即可,细节很容易错。
类型:思维(*)


20威海(二)(CCPC)(勉强有**)(南京大学)(384)


https://vjudge.d0j1a1701.cc/contest/511210#problem/C

A:    两边背老人过桥。考虑在左边和在右边开始第二次。确实不好想,但可以出
类型:思维(不好想)

H:    群聊发消息查询接受数量。利用vector数组,思维删除是添加一个删除点。或者直接逆着跑
类型:思维

D:    一个数和的形式分为两个数,判断有无三个数最大公因数<该数。打表可以发现是整除平方数,前1e12%判断,后1e6相除判断。(错在判断平方数用了下标)
类型:思维

L:    一个数按和拆为若干个个非0数,求最大公倍数最大。一个是思维来,但是不行,还有就是背包。将问题转为选2的幂数,3的幂数,4的幂数....求最大,然后01背包,时间是可以的,只是空间必须优化为一维。
类型:背包(*,出了就有)

C:    给三堆点,求三堆点的距离的期望。按贡献思维,树形DP找到每个边共享的距离(数量*边权),而且最终距离=(dis(a,b)+dis(a,c)+dis(b,c))/2;,应该是按边算,所以重点不会计算其中,但是最后除的时候好像没有
类型:树形DP(银)


20年长春(CCPC)(上海交通大学)(321)


https://vjudge.d0j1a1701.cc/contest/511432

A: 若干个商品,买后可以有一定的返还。
类型:01背包

D: 0-i-1和i进行^的最大值为dp[i],求前n项和。先打表看规律,后思维判断多少,二进制中1的个数
类型: 打表+思维(快的话*)

F:     求一个树中两结点^等于lca的时,编号的^和。按照异或和=多位按位异或后的和
101 ^ 011=100 ^ 000+00 ^ 10+1 ^ 1=100+10+0=110
类型: 思维+二进制+启发式合并(银)

A、D需要再快40分钟,这个启发式算偏算法。

20年绵阳(CCPC)(电子科技大学)(309)


https://vjudge.d0j1a1701.cc/contest/512685#overview

D: 一个数组,让一个加1,然后全部减1,求执行次数。二分答案,想到二分后挺简单的。
类型:二分

K:一个数分为多个不互质的数字,使最大和最小的差最小。
类型:打表找规律

J:    多个周期填表,找出这些点中最大的值。从大到小,然后使用next[i]的优化,加上重复的跳过的优化。1400/2000的时间过
类型:思维+优化(不少人是线段树做法)

G: 博弈,暴力答案找规律。暴力代码和最终代码进行拟合可以找出细节。
类型:博弈打表+规律

J题过了基本就有,时间还是比较充足的。


19年CCPC哈尔滨


https://vjudge.net/contest/520664#problem/I

J:找两个质数和为指定的数,没有输出-1。一个为2或者3
类型: 简单思维

K:每次加1,越多给的越多,求最后有多少的数学期望。总*(开始的权值)
类型: 简答思维

F: 6个字符串中,每个字符串出一个字符,能不能组成“harbin”。暴力搜索所有情况。
类型: 暴力

I: 给一个前缀高度差数组,找出有多少种排列满足。思考底端相加。
类型: 计数DP(*)

I题的时间


20年济南(ICPC)、

https://ac.nowcoder.com/acm/contest/10662

前面四题不是很难,只是读题意还是不太好
类型:思维题(*)

A:给两个矩阵a,b,求a*c=b.c的c的种类数
类型:高斯消元(银)

  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

int 我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值