钾肥喵的窝

我在 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()
阅读全文 »