2017 ACM Arabella Collegiate Programming Contest
挂在CF GYM的一套题,据说只有DIV2的难度,就做了一下,前面还好,后面做了好久,才清理干净。
暑期去实习,还有两个月,这两个月要做的事情有很多很多,多多看书,多多运动。
A. Sherlock Bones
给出一个由01组成的字符串,问有多少个三元组$i,j,k$,满足区间$i$到$j$中$1$的数量等于区间$j$到$k$中1的数量。
算每两个连续的$1$中$0$的数量,然后找规律。。。分段计算每一段产生的贡献。
1 | char x[maxn]; |
B. Unusual Team
水题,判断大小。
1 | int a,b; |
C. Cheap Kangaroo
一共$n$个人,每个人要吃$x_i$的食物,所用的盘子大小与食物的数量相等,花费与盘子的大小相等。每个人希望用相同大小的盘子,问最小花费和可以使用的最大盘子。
说得很绕,又是一个水题。最小花费求和,最大盘子所有数的gcd。
1 | int n; |
D. Magical Bamboos
$n$个竹子,每个竹子高度$h_i$,现在你可以对其中一个竹子的高度减$1$,其余竹子高度均加$1$,问能否最终所有竹子的高度相等。
挺有意思的题目,那天晚上把这个题想复杂了。首先多个相同的竹子就可以当成一个竹子了,然后考虑从最高的竹子减1,其余竹子加1,为了最高与次高的竹子相等,需要他们同奇同偶。之后这两个竹子可以当成一个竹子了,往下递推下去就好了。
1 | int n; |
E. Competitive Seagulls
首先有$n$个全部为白色的点,排成一排。两个人进行如下的游戏:假设$L$是最长连续为白色点的长度,那么可以挑选一个长度$P$,要求$P$是质数且小于等于$L/2$,将这些点染成黑色。不断重复上述步骤,不能进行游戏的人算输。现给定长度$n$,问双方都最优,输赢情况。
当$n$大于等于$4$的情况下 ,先手可以在中间染$2$个或者$3$个点,使得两边是相同的情况,这样后手必败。
F. Monkeying Around
题意是有N个猴子在座位上讲笑话,每个猴子讲的笑话会有种类和范围,当一个猴子听到没有听过的笑话的时候,它会从座位上离开,掉地上;当听到已经听过的笑话的时候,它会从地上回到座位。现在给出各个讲笑话的情况,问最终猴子有多少在座位上。
把这个转换成区间问题,按照所有区间的左端点排序,右端点排序。枚举每一个猴子,维护当前影响该点的笑话,如果最后的笑话出现$2$次以上,那么该猴子在座位上。
1 | int n, m; |
G. Snake Rana
hihocoder上面的一道题
$K<=20$,容斥原理。
首先算出所有格子的数量,格子为$r*c$的数量有$(N-r+1)*(M-c+1)$个,枚举$r$和$c$。
$$
\sum_{r=1}^{N}\sum_{c=1}^{M}(N-r+1)(M-c+1) = \frac{(N+1)*N}{2}*\frac{(M+1)*M}{2}
$$
然后容斥减去有一个黑格子的,加上有两个格子的。。。。
至于算有$g$个黑格子有多少个,分别计算$x,y$的最大值$maxx,maxy$,最小值$minx,miny$。结果等于$minx*miny*(N-maxx+1)*(N-maxy+1)$。
1 | int n,m,k; |
H. Mirrored String I
水题,按照题意搞一遍就好了。。。
1 | int a,b; |
I. Mirrored String II
问有多少回文子串。
长度在$1000$范围内,dp。
1 | char val[maxn]; |
J. Lazy Physics Cat
一个圆,里面有一个三角形,三个顶点分别在圆心、圆上、圆上。问扇形区域剪掉三角形面积那部分面积是多少。。。
1 | double len,a; |
K. Owl Geeks
写到这里发现水题也太多了。。。这个题按照题意模拟一下就好了。。。
1 | int a,b,n; |
L. All’s Wall That Ends Wall
Leetcode上面的一个题,给出各个位置的高度,然后问在一维的情况下能够围出的水的量。二维的题也有(优先队列)。现在有$Q$次询问,每次可以对位置$X$的高度增加$V$,然后动态查询当时可以围出的水的量。
想了很久。。。不会做。。。看了其他人的做法。。。
从左到右维护一个递增的序列,通过这个序列来计算水的量。同理,从右到左也维护这么一个递增的序列。
每次更改,去找前后的位置即可。。。
感觉这个题复杂度有些迷啊。。。
1 | int n,q; |
M. Make Cents?
给出各种钱币和汇率,问最终有多少钱。
1 | int c,n; |