NOIP Camp #1
某机构举办的noip/csp冲刺营。
题意&题解
A
定义函数 (f(a_1,a_2...a_n)) 为:
其中 (oplus) 表示二进制按位异或运算。
(注意仔细看题,并不是 (a_1...a_n) 的异或和!)
多组询问。每次给定 (L,R),求 (max {f(a_l,a_{l+1}...a_{r}), Lle lle rle R})
(nle 1000,mle 10^6)。
题解:注意到 (nle 1000),考虑处理每对 (F(l,r)) 表示 ([l,r]) 区间的答案。
设 (f(l,r)) 表示 (f(a_l...a_r))。注意到它等于 (f(l,r-1)oplus f(l+1,r))。
然后两维求个前缀max就可以得到 (F)。
复杂度是 (O(n^2) - O(1)) 的。
B
给定 (n,m),求有多少 (x) 满足:
- (xin [0,n])
- (forall k, xmod 10^kge mmod 10^k)
(n,mle 10^{50})
题解:很明显它说的就是每一位都 (ge m) 对应的那一位。
然后类似数位dp,处理一下卡界就行了。
C
有 (n) 盏灯排成一列,初始所有灯均为熄灭状态。
你需要对这 (n) 盏灯进行 (n) 次操作。
对于第 (i) 次操作,选取 (i) 的所有质数倍标号的灯,将它们的状态取反(点亮变为熄灭,熄灭变为点亮)。
你需要回答最终有多少盏灯为开启状态。
90pts: (nle 5e7)
时限2s。
题解:这题我只会90pts
首先线性筛出所有质数,然后模拟它的过程,直接就是 (nloglog n) 的,可以获得 (1e6) 的部分分。然而,过 (1e7) 需要少量的乱搞。尽管是乱搞,它对思路的启发也很有意义。
分析一波, 它其实求的是 ([1,n]) 种有多少个数有奇数 种 质因数。
对于 (5e7) 的范围,线性筛写好看点是能很快跑出来的。只是 (loglog n) 有点卡而已,甚至把它常数卡一卡也就过了。
考虑 (> sqrt{n}) 的那些质因数,只会出现一种, 且次数为 (1)。可以从筛好的质数种枚举,设它为 (p)。那剩下的部分就 (le n/p),要求由偶数种质因数构成 (注意到我们先选了一个,所以剩下那些就是偶数个)。这个可以预处理出来,设 (g(n,0/1)) 表示由偶数/奇数个质因数构成的方案数,可以用原题筛出来的那个东西求前缀和轻松得到。
然后就解决了包含一个 (> sqrt{n}) 的质因数的情况,复杂度 (O(n))。接下来考虑那些 (le sqrt{n}) 的质因数。
我们发现它们很少,由这些小质因子构成的数,也在 (0.75n) 左右。于是我们考虑用 DFS,就可以精确枚举到所有剩下的数,略小于 (n)。这个DFS写出来可以发现,它显然是O(答案)的,于是它是 (O(n)) 的,且常数小。
然后就可以卡过 (5e7) 了。
据说剩下10pts是留给出题人切的,(nle 10^{13})。目测需要min-25,或者是powerful number等神秘筛法来做。
D
根本不会。再见~
总结
A题看错题意,分数-100
B题没看清范围,1e50用的long long,分数-50
C,D算是正常发挥了。
暴露的一个问题是,做题过于求快,而不稳,导致题意读错了。也许是受 CF/AT 比赛的影响,也有我个人的原因。
对于NOIP/CSP赛制的比赛,考场策略与节奏还需要不断摸索和练习。