A.Tetris
题意就是有一个$n\times m$的俄罗斯方块局面,求从下到上能消掉多少个方块,模拟一发就行。
代码:
1 |
|
B.Lecture Sleep
题意就是有$n$分钟的时间有时候学习有时候睡觉,每分钟如果学习的话可以获得$a_i$的知识量,你可以选择强行学习$k$分钟,求$n$分钟之后最多能学到的知识。
枚举强行学习的区间$[i,i+k-1]$,那么此时答案是
$sum_{正常学习}(1,i-1)+sum_{强行学习}(i,i+k-1)+sum_{正常学习}(i+k,n)$,所有的可能取最大值就是答案,其中$sum$用前缀和预处理优化一下就行。
代码:
1 |
|
C.Chessboard
题意就是给你$4$个块$n \times n$的$01$矩阵,要拼成一块$2n \times 2n$的$01$矩阵使得任意相邻的数都不同,你可以修改矩阵中的数使得符合条件,求最少修改的次数
一开始没想法, 后来发现实际上任意相邻的数都不同的矩阵只有两种,$01010…$或$101010…$,因此只要预处理出这两种$2n \times 2n$的矩阵,然后暴力枚举四个给的矩阵分别是在哪四个位置即可。
代码:
1 |
|
D.Pair Of Lines
题意就是给你$n$个点,问是否能用不会超过两根直线将所有的点覆盖所有的点。
计算几何没怎么学过,叉积也早就忘记了(弱渣瑟瑟发抖)。
实际上这题只要用任意两个点去构成一条直线,然后去掉这条直线上的点,再看剩下的点是否在一条直线上即可。那么怎么看三个点是否在一条直线上呢,用向量叉积的方法:设$a(x1,y1),b(x2,y2),c(x3,y3)$,由于叉积的几何意义可以表示两个向量所构成的平行四边形面积,$\vec A \times \vec B = |A| \times |B|*sin(\vec A,\vec B)$,叉积为$0$说明他们形成的面积为$0$,这不就刚好说明他们在一条直线上吗,以前还傻傻地用斜率做,还要特判垂直的情况233。
代码:
1 |
|
E.Tufurama
题意就是给你季$n$的节目单,season $x$有$1\sim y$个episode,求存在season $x$有第$y$个episode且第$y$个season有第$x$个episode的对数、
一开始用离线树状数组wa
了好几次,最后一分钟用主席树才过……。可以发现season $x$如果和episode$y$组成对数,那么就存在$j \in [1,y]$,$season[j] \ge x$,转换下题目也就是求$1 \sim episode_i$中大于等于$i$的个数,然后要注意除掉自己,自己不能和自己一组,那么用主席树就可以做到这个了。
最后统计出来是所有的对数,因此答案要除以$2$
代码:
1 |
|