7.18 打一半电脑死机的牛客3
A-Clam and Fish
题意
共n天,每天共有四种状态
- 无鱼无蛤蜊
- 无鱼有蛤蜊
- 有鱼无蛤蜊
- 有鱼有蛤蜊
每天可进行的操作:
- 做鱼饵(当天有蛤蜊)
- 钓鱼(当天有鱼时不消耗鱼饵,无鱼时可用一个鱼饵换一条鱼)
- 啥也不做
求出最多可以抓多少鱼
思路
有鱼的时候抓鱼一定最优,没有鱼的时候先考虑有鱼饵的情况,如果当前鱼饵数小于之后没有鱼的天数,则收集鱼饵,否则就用鱼饵换鱼。这样既没鱼也没鱼饵的时候就可以直接用鱼饵换鱼。
B-Classical String Problem
题意
给定一个字符串 $s$,规定两种操作:
- $A$ 操作:输出 $s$ 的第 $x$ 个字符;
- $M$ 操作:将 $s$ 的最右边 $x$ 个字符串移到最左边或者将 $s$ 的最左边 $x$ 个字符串移到最右边
思路
设一个变量 $cur$ ,初始值为 $0$ ,题目本质就是 M 操作时改变 $cur$ 的值,左移右就是让 $cur$ 加上 $x$ 后对字符串长度 $len$ 取模,右移左就是让 $cur$ 减去 $x$ 后对字符串长度 $len$ 取模,$A$ 操作时以 $cur$ 为起点取第 $x$ 个字符,为了保证 $cur$ 的值不越过 $[0,len-1]$ 这个范围,先将 $x$ 对 $len$ 取模,再在计算 $cur$ 时多加一个 $len$
代码
1 |
|
D-Points Construction Problem
题意
无限大的平面上全部为白点,选择刚好 $n$ 个涂黑,需要有恰好 $m$ 对相邻点颜色不同。求出其中一种方案。
思路
呜呜气死了场上没开这题血亏。就是个简单构造题。
已知有 $n$ 个黑点的情况下,最多有 $4*n$ 对相邻点颜色不同,即分散开来的每个点的四周;而最少的情况是补成方块(或者最接近方块)的形状。同时能发现不可能有奇数点对。非法情况就只有 $m$ 为奇数、$m$ 过小、$m$ 过大,而区间内的任意偶数都能通过固定形状变化而得。
最大情况判掉,反正好写。
只有一列的情况也选择特判,好写一点。因为 $n\leq 50$ ,所以先排出一列间隔 $100$ 的点。之后根据 $m$ 的值合并点。最少的情况为 $n$ 个点排成连续的直线,此时有 $2*n+2$ 个点对。
因为 $n\leq 50$ ,所以最多只有 $7$ 种排列情况。逐一判断。
对于每个排列情况:设每列最多有 $x$ 个。最少情况是所有点排成矩形(或者最接近矩形);最多情况是先排一个 $x*x$ 的方块,剩下的点排成一列,大概是个小旗的形状。
$m$ 在当前排列合法时就可以从最多的情况一个一个点合并。
代码
1 |
|
F-Fraction Construction Problem
题意
给定 $a$ 、$b$,求满足$\frac{c}{d}-\frac{e}{f}=\frac{a}{b}$的 $c$ 、$d$ 、$e$ 、$f$ ,其中 $d$ 和 $f$ 需小于 $b$
思路
首先考虑 $a$ 和 $b$ 不互质的情况(题目没有保证互质)。可以想到直接让 $c/d$ 为整数,$e$ 和 $f$ 相减一下就得到了。
通分后有 $\frac{c * f-e * d}{d * f}=\frac{a}{b}$(此时 $a$ 、$b$ 互质)。则必须有 $d*f\equiv 0$ $(mod$ $b)$ ,此题需要 $d$ 、$f$ 尽量小即直接考虑 $d * f=b$。
可以初步判掉一部分无解的情况:$b$ 为 $1$ 时和 $b$ 为质数显然无解。
当 $d$ 、$f$ 互质时有 $c * f-e * d=1$ 即 $a * c * f-a * e * d=a$ 。故求 $c$ 、$e$ 可以通过 $exgcd$(最后再乘上 $a$ )。
还要注意的就是当 $b$ 只有一个质因数时,不存在互质且积为 $b$ 的 $d$ 、$f$,此时无解。
代码
1 |
|