钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

题面

E.Looping Playlist

题意

播放列表从任意位置开始循环播放一次, 给定音高, 求最少歌曲数.

每首歌曲有两个(含)以上音符组成, 均遵循某种大调音阶(major scale).

下面给出题目中的12种大调音阶:

major scale Root +0 Root +2 Root +4 Root +5 Root +7 Root +9 Root +11 Root +12
Do Do Re Mi Fa Sol La Si Do
Do# Do# Re# Fa Fa# Sol# La# Do Do#
Re Re Mi Fa# Sol La Si Do# Re
Re# Re# Fa Sol Sol# La# Do Re Re#
Mi Mi Fa# Sol# La Si Do# Re# Mi
Fa Fa Sol La La# Do Re Mi Fa
Fa# Fa# Sol# La# Si Do# Re# Fa Fa#
Sol Sol La Si Do Re Mi Fa# Sol
Sol# Sol# La# Do Do# Re# Fa Sol Sol#
La La Si Do# Re Mi Fa# Sol# La
La# La# Do Re Re# Fa Sol La La#
Si Si Do# Re# Mi Fa# Sol# La# Si
阅读全文 »

重构一时爽, 构错火葬场

重构的原因很简单: 最近在学Java, 刚好Selenium有Java版本, 所以就有了这个项目.

经验教训

之前的版本中, 信息采用硬编码, 于是就出现了发出来没删干净的情况, 这次重构把配置文件分离出来了.

代码风格可能不太好, 轻喷

配置信息的读取

一开始用的是EasyExcel, 但是一直读不到数据, 于是换成了POI

阅读全文 »

题面

D1. Painting the Array I

官方题解

官方题解(D1对应1479B1)

题解大意

约定: + 我们将生成的两个序列分别称为st, 也就是a(0)a(1) + 我们将st的最后一个元素分别称为xy + 我们将扫描ai过程中的当前元素称为z + 我们将xz后首次出现的位置称为next(x)

贪心策略I: + z 等于 x 或 y 中某一个, 将 z 分配给相反的子序列, 比如 z == x 时, 将 z 分配给 t 附加在 y 后. 特别的, 如果 z == x == y 时, 任意分配即可

贪心策略II: + 如果 z, x, y 互不相等, 将 z 分配给具有最近的下一个相同值的值后. 说人话就是: 如果 next(x) < next(y), 则 z 附加在 x 后, 否则, z 附加在 y 后

证明: 见官方题解

阅读全文 »

题面

https://www.luogu.com.cn/problem/P5091

基本思路

(根据题解可知)这题用欧拉降幂+快速幂解决.

下面开始介绍 温馨提示: 为了您的阅读体验, 请坐和放宽, 等待图片加载完成

扩展欧拉定理

公式如下, 证明请自行查阅资料:

公式在膜m意义下成立(才不会说是我打LaTeX的时候忘记加了 已经加上了)

套用上面的公式, 我们现在只需要求出欧拉函数的值即可

阅读全文 »

题面

E. Equality Control

题意

判断两段 "程序" 是否等价. 细节参见题面(懒得翻译)

暴力模拟写法

很简单, 递归模拟即可. 你问结果? 当然是喜闻乐见TLE了.

投机取巧

我们可以发现如下性质: + shuffle中如果是一个常数列, 那么这个shuffle只有唯一确定的排列, 也就是说这个shuffle没有意义 + 遇到contract直接读过去就行, 它也是没有意义的 + sorted和shuffle是相互覆盖的关系, 也就是说, 如果它们相互嵌套, 只要读最外面的就可以了 + 等价的条件是: 两段 "程序" 中所有有意义的shuffle区间相等(不管是位置还是其中的数列)

阅读全文 »

题面

https://ac.nowcoder.com/acm/contest/9981/E

读题

很显然, 这是一道计算几何题, 我们可以运用高中知识求解.

现在我们来分类讨论, 很显然有以下情况: + r小于等于正三棱锥的内切球半径时, s等0 + r大于等于正三棱锥的外接球半径时, s等于正三棱锥的表面积 > 当r介于二者之间时, 我们设球体被三棱锥的一个面所截得到的圆为O, 又有两种情况: > + O内含于三角形中, 此时根据几何知识求得O的半径再计算面积即可 > + O相交于三角形, 此时要求的面积就是O的面积减去三个弓形的面积, 下面做公式推导

阅读全文 »

题面

B. Nezzar and Lucky Number

暴力打表

根据某位大佬的反馈, 本题完全暴力也是能过的, 但是我就是想打表. 当然, 只需要打一部分的表就可以了, 我们可以证明当ai >= 10 * dai必然可以分解成lucky number的和. 所以我们只需要打到 10 * d 就可以了.

结论证明

我们设ai = 10 * d + k, 那么显然我们只需要考虑k能否分解了, 令k = x * 10 + y. 当10 * d <= ai < 11 * d时, 十位上就是d, 显然成立. 当ai >= 11 * d时, 我们可以将ai分解成10 * d + yx * 10 + d, 显然成立.

阅读全文 »

重构一时爽, 构错火葬场 重构的起因是因为有一天任务计划程序显示0X1但并没有收到邮件, 很显然, 由于忽忽悠的采用了比肩国际一流游戏厂商的极为先进的生物(土豆)供电服务器, 导致经常出现难以预料的情况(喂, 明明是你的脚本鲁棒性不够好嘛).

开搞之前

首先分析需求.

之前的脚本发送的邮件中并没有最后打卡时间, 又由于鲁棒性的不足, 导致并不能完全通过收到邮件来判断是否成功打卡.

同样, 之前的脚本并没有对异常情况的处理机制(没错, 我就是能卡你半个小时), 导致出现异常时不能收到邮件反馈.

时间获取

历史填报会打开新的标签页, 所以就需要切换标签页.

1
2
3
4
# 获取当前浏览器的所有标签页
tabs = driver.window_handles
# 定位到第二个标签页
driver.switch_to.window(tabs[1])

接下来就是老套路, 定位元素, 获取值, Xpath走起.

1
table = WebDriverWait(driver, 180).until(EC.presence_of_element_located((By.XPATH, '//*[@id="countTableBody"]/tr[1]/td[1]')))

那么如何获取当前时间呢? 我们可以使用datetime库.

1
today = datetime.datetime.now()

阅读全文 »

题面

https://ac.nowcoder.com/acm/contest/11290/F

从S的生成过程研究递推关系

如果s为空,那么s="0".

如果s不为空,就在ss后面再添加s这个序列。s表示将s序列中的0变为1,1变为0.

很显然,当我们已知 1 ~ 2n 的序列时, 我们可以通过取反获得 (2n + 1) ~ 2n+1 的序列, 也就是说第 2n + k 项实际上可以通过对第 k 项取反得到. 于是我们就得到了递推关系, 那么我们需要做什么呢? 假设我们需要求第 p 项, 而 p = 2n + k , 我们需要做的就是求第 k 项并取反, 对 k 重复上述步骤. 于是递归就写出来了, 下面考虑递归的边界条件, 很显然, 只要考虑第一项和第二项就可以了(不会求就去吟诗啊, 苟...).

阅读全文 »

题面

https://www.luogu.com.cn/problem/P1781

基本思路

记录编号, 比较(三百行的高精度板子在招手)票数。

踩的坑

虽然是水题, 但是可以拿来熟悉语法啊, 所以(自撰一良方,服之)决定用STL来写, 遂翻车。

第一个坑是关于Lambda表达式的, 参数的数据类型填错了, 导致CE, 所以说数据类型要对应。

第二个坑是string的比较运算符, 查阅资料可以知道, string重载的比较运算符是通过strcmp()实现的。 下面放出glibc对strcmp()的实现。

阅读全文 »