前言
如有笔误和错误,欢迎给位 dalao 指出。
赛时游记
14.00
开始下载题目。
14.02
打开题目。
14.02 ~ 14.30
看第一题,发现就是一个循环结构+选择结构,秒切+检查。
14.31 ~ 16.30
打开第二题,直觉想到由于
g
c
d
gcd
gcd 以及那个
z
=
x
×
y
×
gcd
(
x
,
y
)
z=x\times y \times \gcd(x,y)
z=x×y×gcd(x,y) 等式,就开始分解质因数,后来发现
n
\sqrt n
n 算法要 TLE,所以开始推式子。
写废了 x x x 多张草稿纸,终于推出来一个奇奇怪怪的式子,然后用时间瓶颈为求 gcd \gcd gcd 的算法把打样例过了。
但是当我发现我把 50000 50000 50000 的大样例复制 10 10 10 遍之后在本地开 O2 要跑 1.2 秒,于是又加了一个快读快写和一些小卡常。
16.31 ~ 17.40
开始看第三题,看到 答案要对
1
e
9
+
7
1e9+7
1e9+7 取模 以及数据范围就开始想
n
3
n^3
n3
d
p
dp
dp 做法。但是一直推了很久都没有想出来,所以决定打个暴搜了事。
17.40 ~ 18.00
把三个题目代码交了上去,然后开始验证正确性。然后发现我的第二题用了 unsigned long long
会出现玄学错误(好像出现了负数),所以便改成了 long long
。
At last
:
100
+
100
+
35
=
235
100+100+35=235
100+100+35=235。
各题总结
T1
这个题目比较水,就是把每个题目对的个数和错的个数记录下来,然后看是对还是错的个数多,哪个多就说明哪个是错还是对,最后在和题目给出的答案比较就行。
T2
典型的数学题。(看题目名称也知道)
题意就是给定
x
,
z
x,z
x,z 以及这个特别烦的等式
z
=
x
×
y
×
gcd
(
x
,
y
)
z=x\times y \times \gcd(x,y)
z=x×y×gcd(x,y),求
y
y
y 的最小值。显然,我们可以给出
y
y
y 的上界给他求出来,就是
z
/
x
z/x
z/x。(显然当
x
%
y
≠
0
x\% y \not= 0
x%y=0 该题无解。) 然后,我们可以发现,如果
y
=
z
/
x
y=z/x
y=z/x,那么为了让等式成立,我们就需要对右边的式子除以
gcd
(
x
,
y
)
\gcd(x,y)
gcd(x,y),那么接下里的问题就是如何让他除下去。显然,我们有两种方法让右边的式子的值变小,及只让
y
y
y 变小,或者让
gcd
(
x
,
y
)
,
y
\gcd(x,y),y
gcd(x,y),y 都变小。为了让
y
y
y 的值越小,就要让
y
y
y 中不包含
gcd
(
x
,
y
)
\gcd(x,y)
gcd(x,y) 那一部分先除下来,然后再让
gcd
(
x
,
y
)
,
y
\gcd(x,y),y
gcd(x,y),y 两者同时变小。注意一点,在同时变小的时候,
gcd
(
x
,
y
)
\gcd(x,y)
gcd(x,y) 一除以
w
w
w,这个右边的式子就会除以
w
2
w^2
w2,所以,如果右式无法整除除
w
2
w^2
w2 就输出 -1
。
这个题还是耽搁了我很久来推式子的,确实是一个好的思维题。
T3
显然,看到这个取模,我们就能够轻松想到动态规划。(但考试为了作对这个题目,推了半天都没退出来,还让我忘记在打包搜的时候记忆化了!)既然有了官方题解,那我就在下面粗略的理一下思路。
设 d p i , j , k dp_{i,j,k} dpi,j,k 是当执行到第 i i i 个操作时,左边有 j j j 个字符要被删掉,右边有 k k k 个字符要被删掉时方案数、显然,我们可以根据当前执行到的操作,来确定现在新出现的那个字符串的长度。假设其为 l e n len len。
如果 s i s_i si 是 ‘-’
则我们要么删前面的,要么删后面的,则此时有状态转移: d p i , j , k = d p i − 1 , j + 1 , k + d p i − 1 , j , k + 1 dp_{i,j,k}=dp_{i-1,j+1,k}+dp_{i-1,j,k+1} dpi,j,k=dpi−1,j+1,k+dpi−1,j,k+1
如果 s i s_i si 不是 ‘-’
-
k ≥ 1 k\ge 1 k≥1 ,显然此时后面有要删的,则新加的字符也一定会被删掉: d p i , j , k = d p i − 1 , j − 1 , k + d p i − 1 , j , k − 1 dp_{i,j,k}=dp_{i-1,j-1,k}+dp_{i-1,j,k-1} dpi,j,k=dpi−1,j−1,k+dpi−1,j,k−1
-
k = 0 k=0 k=0 则当前这个一定要和匹配之后才能加进去,及在 t l e n − j = s i t_{len-j}=s_i tlen−j=si 时,有状态转移 d p i , j , k + = d p i − 1 , j , k dp_{i,j,k}+=dp_{i-1,j,k} dpi,j,k+=dpi−1,j,k
-
如果 l e n = j len=j len=j 则加在后面的也可以被前面的删掉: d p i , j , k + = d p i − 1 , j − 1 , k dp_{i,j,k}+=dp_{i-1,j-1,k} dpi,j,k+=dpi−1,j−1,k
后记
总体来说,这次考试考得不是特别理想( d p dp dp 的转移方程还是没有推出来,这一块有待加强),不过数学题倒是做对了,希望可以继续保持。