题意
有
3 3 个实数
n n ,
a a ,
b b (
4\le n\le 5,5 \le a,b \le 10 4 ≤ n ≤ 5 , 5 ≤ a , b ≤ 1 0 ) ,你求到了一个函数
f(n)=n^a+n^b f ( n ) = n a + n b 的值。
求满足
\lfloor f(n) \rfloor = \lfloor f(n') \rfloor ⌊ f ( n ) ⌋ = ⌊ f ( n ′ ) ⌋ 的
n' n ′ 的变化范围,即
\max (n')-\min (n') max ( n ′ ) − min ( n ′ ) 。
Solutions
Sol 1
直接枚举,时间复杂度
O\left(\frac{T\times \max (ans)}{eps}\right) O ( e p s T × max ( a n s ) ) ,期望得分:
?~pts ? p t s 。
Sol 2
考虑优化枚举。发现可以利用二分的思想,让精度不断提高。
时间复杂度
O\left(T\log {10^{bit}} \right) O ( T log 1 0 b i t ) ,单次精度为
10^{\lfloor \log_{10} ans\rfloor-bit} 1 0 ⌊ log 1 0 a n s ⌋ − b i t ,期望得分:
65~pts 6 5 p t s 。
可以对
10 1 0 ,
12 1 2 ,
19 1 9 号数据点打表,总得分
80~pts 8 0 p t s 。
Sol 3
这是来自
\mathsf o \color{red} \mathsf{uuan} o u u a n 的面向数据和SPJ的骗分方法。
考虑SPJ比较的是绝对误差,并且本题单次询问答案很小,随便试试就可以了,配合Sol 2 可以得到更高的分数。
期望得分:
65-100~pts 6 5 − 1 0 0 p t s ,
本来分数会更低,但是因为这个题太简单导致出题人不想卡。
int main ()
{
long long t, seed, op;
cin >> t >> seed >> op;
if (op) cout << t * 0.00003058 ;
else cout << t * 0.00001028 ;
return 0 ;
}
Sol 4
这是来自
\mathsf N \color{red} \mathsf{aCly~Fish} N a C l y F i s h 的方法。
要求出:使
n^a+n^b n a + n b 向下取整后相等的
n n 的差值,考虑牛顿迭代。
设
y=\lfloor n^a+n^b\rfloor y = ⌊ n a + n b ⌋ ,
f(x)=x^a+x^b f ( x ) = x a + x b 。
只要求出
f(x)=y f ( x ) = y 和
f(x)=y+1 f ( x ) = y + 1 两个方程的解,做差即可。
时间复杂度
O(T\log y) O ( T log y ) ,期望得分:
80-100~pts 8 0 − 1 0 0 p t s 。
Sol 5
单独考虑
a=b a = b 时的答案,设
y=\lfloor n^a+n^b\rfloor=\lfloor 2n^a\rfloor y = ⌊ n a + n b ⌋ = ⌊ 2 n a ⌋ ,
f(x)=2x^a f ( x ) = 2 x a 。
做法同
Sol 4 ,但是因为
f(x) f ( x ) 可以构造出反函数
arcf(x)=\sqrt[a] \frac{x}{2} a r c f ( x ) = a 2 x ,可以单次
O(1) O ( 1 ) 询问。
时间复杂度
O(T) O ( T ) ,期望得分
30~pts 3 0 p t s ,结合
Sol 4 可以得到
90~pts 9 0 p t s 。
Sol 6
发现在
a \not = b a ̸ = b 时无法轻松构造
arcf(x) a r c f ( x ) ,所以
Sol 5 无法继续扩展,考虑换一种
O(1) O ( 1 ) 的反函数求法。
可以通过计算和画图发现
f(x) f ( x ) 在区间
[0,+\infty) [ 0 , + ∞ ) 单调递增,考虑用
g(x)=bx^k g ( x ) = b x k 去逼近
f(x) f ( x ) ,可以发现当
\Delta y=1 Δ y = 1 时,
|\Delta x| ∣ Δ x ∣ 是很小的。
(其实也可以目力测量或者目力看样例)
因为
|\Delta x| ∣ Δ x ∣ 很小,考虑用微分计算近似值来替换
arcf(x) a r c f ( x ) \Delta y \approx \mathrm dy=f'(x) \Delta x Δ y ≈ d y = f ′ ( x ) Δ x 所以可得
\Delta x Δ x 的快速计算式
\Delta x \approx \frac{\mathrm dy}{f'(x)} Δ x ≈ f ′ ( x ) d y 所以可推导出
\Delta n' Δ n ′ 的答案
\Delta n' \approx \frac{1}{an^{a-1}+bn^{b-1}} Δ n ′ ≈ a n a − 1 + b n b − 1 1 对于本题极限数据来说,单次绝对误差
\delta n'\approx \left|\sqrt[10] \frac{{2\times 5^{10}+1}}{2}-5-\frac{1}{20\times 5^{10}}\right| < 2\times 10^{-8} δ n ′ ≈ ∣ ∣ ∣ ∣ 1 0 2 2 × 5 1 0 + 1 − 5 − 2 0 × 5 1 0 1 ∣ ∣ ∣ ∣ < 2 × 1 0 − 8 。
由于本题数据随机生成,发现最大数据绝对误差不超过
10^{-3} 1 0 − 3 ,可通过本题。
时间复杂度
O(T) O ( T ) ,期望得分:
100~pts 1 0 0 p t s 。
Sol 7
这种做法出题人在考试前一天晚上想了出来,发现还真的有人用这种做法过了此题
考虑如何构造
a\not = b a ̸ = b 时的
arcf(x) a r c f ( x ) ,发现
a^b =\exp (b \ln a) a b = exp ( b ln a ) ,所以直接做就好。
时间复杂度
O(T) O ( T ) ,期望得分:
100~pts 1 0 0 p t s ,
不如Sol6 优秀。
评论
发表评论