本文最后更新于:2024年11月26日 下午
A. ICPC Shenyang in NEU, the Tenth Consecutive Year
题目大意:
你要猜一个 1923 ∼ 2023 1923 \sim 2023 1923 ∼ 2023 之间的整数,询问次数不超过 100 100 100 次。
解题思路:
直接枚举会超过 100 100 100 次限制,但是容易发现只要询问完 1923 ∼ 2022 1923 \sim 2022 1923 ∼ 2022 之间的数即可,如果都返回 0 0 0 直接输出 2023 2023 2023 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <bits/stdc++.h> constexpr int N = 1e5 + 6 ;void solve () { for (int i = 1923 ; i <= 2022 ; ++i) { std::cout << "? " << i << std::endl; int x; std::cin >> x; if (x == 1 ) { std::cout << "! " << i << std::endl; return ; } } std::cout << "! " << 2023 << std::endl; }int main () { int t; std::cin >> t; while (t--) { solve (); } return 0 ; }
B. Computational Intelligence2 ^2 2
题目大意:
给定两条线段,你要在两条线段上随机选一个点,求两点平面欧几里得距离平方的期望值。
解题思路:
我们先考虑用 P P P 和 Q Q Q 表示线段一和线段二的点:
P ( x 1 + t ( x 2 − x 1 ) , y 1 + t ( y 2 − y 1 ) ) Q ( x 3 + s ( x 4 − x 3 ) , y 3 + s ( y 4 − y 3 ) ) P(x_1 + t(x_2 - x_1), y_1 + t(y_2 - y_1)) \\
Q(x_3 + s(x_4 - x_3), y_3 + s(y_4 - y_3))
P ( x 1 + t ( x 2 − x 1 ) , y 1 + t ( y 2 − y 1 )) Q ( x 3 + s ( x 4 − x 3 ) , y 3 + s ( y 4 − y 3 ))
其中 0 ≤ s , t ≤ 1 0 \le s, t \le 1 0 ≤ s , t ≤ 1 。
则 P P P 和 Q Q Q 的平面欧几里得距离的平方为:
D ( P , Q ) = [ x 1 + t ( x 2 − x 1 ) − x 3 − s ( x 4 − x 3 ) ] 2 + [ y 1 + t ( y 2 − y 1 ) − y 3 − s ( y 4 − y 3 ) ] 2 = [ ( x 1 − x 3 ) + t ( x 2 − x 1 ) − s ( x 4 − x 3 ) ] 2 + [ ( y 1 − y 3 ) + t ( y 2 − y 1 ) − s ( y 4 − y 3 ) ] 2 \begin{aligned}
D(P, Q) &= [x_1 + t(x_2 - x_1) - x_3 - s(x_4 - x_3)] ^ 2 + [y_1 + t(y_2 - y_1) - y_3 - s(y_4 - y_3)] ^ 2 \\
&= [(x_1 - x_3) + t(x_2 - x_1) - s(x_4 - x_3)] ^ 2 + [(y_1 - y_3) + t(y_2 - y_1) - s(y_4-y_3)] ^ 2
\end{aligned}
D ( P , Q ) = [ x 1 + t ( x 2 − x 1 ) − x 3 − s ( x 4 − x 3 ) ] 2 + [ y 1 + t ( y 2 − y 1 ) − y 3 − s ( y 4 − y 3 ) ] 2 = [( x 1 − x 3 ) + t ( x 2 − x 1 ) − s ( x 4 − x 3 ) ] 2 + [( y 1 − y 3 ) + t ( y 2 − y 1 ) − s ( y 4 − y 3 ) ] 2
令:
{ A = x 1 − x 3 B = x 2 − x 1 C = − ( x 4 − x 3 ) D = y 1 − y 3 E = y 2 − y 1 F = − ( y 4 − y 3 ) \left\{\begin{aligned}
A &= x_1 - x_3 \\
B &= x_2 - x_1 \\
C &= -(x_4 - x_3) \\
D &= y_1 - y_3 \\
E &= y_2 - y_1 \\
F &= -(y_4 - y_3)
\end{aligned}\right.
⎩ ⎨ ⎧ A B C D E F = x 1 − x 3 = x 2 − x 1 = − ( x 4 − x 3 ) = y 1 − y 3 = y 2 − y 1 = − ( y 4 − y 3 )
带入原式,得:
D ( P , Q ) = ( A + t B + s C ) 2 + ( D + t E + s F ) 2 = A 2 + t 2 B 2 + s 2 C 2 + 2 A B t + 2 A C s + 2 B C t s + D 2 + t 2 E 2 + s 2 F 2 + 2 D E t + 2 D F s + 2 E F t s = ( A 2 + D 2 ) + ( B 2 + E 2 ) t 2 + ( C 2 + F 2 ) s 2 + ( 2 B C + 2 E F ) t s + ( 2 A B + 2 D E ) t + ( 2 A C + 2 D F ) s = ( B 2 + E 2 ) t 2 + ( 2 A B + 2 D E ) t + ( C 2 + F 2 ) s 2 + ( 2 A C + 2 D F ) s + ( 2 B C + 2 E F ) t s + ( A 2 + D 2 ) \begin{aligned}
D(P, Q) &= (A + tB + sC)^2 + (D + tE + sF) ^ 2 \\
&= A^2 + t^2B^2 + s^2C^2 + 2ABt + 2ACs + 2BCts + D^2+t^2E^2+s^2F^2 + 2DEt+2DFs+2EFts \\
&= (A^2+D^2)+(B^2+E^2)t^2+(C^2+F^2)s^2+(2BC + 2EF)ts + (2AB + 2DE)t + (2AC + 2DF)s \\
&= (B^2+E^2)t^2+(2AB + 2DE)t+(C^2+F^2)s^2+(2AC + 2DF)s+(2BC + 2EF)ts + (A^2+D^2)
\end{aligned}
D ( P , Q ) = ( A + tB + s C ) 2 + ( D + tE + s F ) 2 = A 2 + t 2 B 2 + s 2 C 2 + 2 A Bt + 2 A C s + 2 BCt s + D 2 + t 2 E 2 + s 2 F 2 + 2 D Et + 2 D F s + 2 EFt s = ( A 2 + D 2 ) + ( B 2 + E 2 ) t 2 + ( C 2 + F 2 ) s 2 + ( 2 BC + 2 EF ) t s + ( 2 A B + 2 D E ) t + ( 2 A C + 2 D F ) s = ( B 2 + E 2 ) t 2 + ( 2 A B + 2 D E ) t + ( C 2 + F 2 ) s 2 + ( 2 A C + 2 D F ) s + ( 2 BC + 2 EF ) t s + ( A 2 + D 2 )
再令:
{ a = B 2 + E 2 b = 2 A B + 2 D E c = C 2 + F 2 d = 2 A C + 2 D F e = 2 B C + 2 E F f = A 2 + D 2 \left\{\begin{aligned}
a &= B^2+E^2 \\
b &= 2AB + 2DE\\
c &= C^2 + F^2 \\
d &= 2AC + 2DF \\
e &= 2BC + 2EF \\
f &= A^2+D^2
\end{aligned}\right.
⎩ ⎨ ⎧ a b c d e f = B 2 + E 2 = 2 A B + 2 D E = C 2 + F 2 = 2 A C + 2 D F = 2 BC + 2 EF = A 2 + D 2
带入原式,得:
D ( P , Q ) = a t 2 + b t + c s 2 + d s + e t s + f D(P, Q) = at^2+bt+cs^2+ds+ets+f
D ( P , Q ) = a t 2 + b t + c s 2 + d s + e t s + f
那么,根据期望的线性性质,答案为:
E ( D ( P , Q ) ) = E ( a t 2 + b t + c s 2 + d s + e t s + f ) = a E ( t 2 ) + b E ( t ) + c E ( s 2 ) + d E ( s ) + e E ( t ) E ( s ) + f \begin{aligned}
E(D(P, Q)) &= E(at^2+bt+cs^2+ds+ets+f) \\
&= aE(t^2) + bE(t) + cE(s^2) + dE(s) + eE(t)E(s) + f
\end{aligned}
E ( D ( P , Q )) = E ( a t 2 + b t + c s 2 + d s + e t s + f ) = a E ( t 2 ) + b E ( t ) + c E ( s 2 ) + d E ( s ) + e E ( t ) E ( s ) + f
接下来我们考虑计算各项期望值:
E ( s ) E(s) E ( s ) 和 E ( t ) E(t) E ( t ) :由于 0 ≤ s , t ≤ 1 0 \le s, t \le 1 0 ≤ s , t ≤ 1 ,所以这两个为 1 2 \displaystyle\frac{1}{2} 2 1 。
E ( s 2 ) E(s^2) E ( s 2 ) 和 E ( t 2 ) E(t^2) E ( t 2 ) :非常简单,小学微积分题,答案为:
∫ 0 1 x 2 d x 1 = ∫ 0 1 x 2 d x = 1 3 \begin{aligned}
\frac{\displaystyle\int_{0}^1 x^2 \mathrm dx}{1} &= \int_{0}^1 x^2 \mathrm dx &= \frac{1}{3}
\end{aligned}
1 ∫ 0 1 x 2 d x = ∫ 0 1 x 2 d x = 3 1
那么最终答案为:
a 3 + b 2 + c 3 + d 2 + e 4 + f \frac{a}{3} + \frac{b}{2} + \frac{c}{3} + \frac{d}{2} + \frac{e}{4} + f
3 a + 2 b + 3 c + 2 d + 4 e + f
时间复杂度 O ( 1 ) O(1) O ( 1 ) 。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <bits/stdc++.h> constexpr int N = 1e5 + 6 ;void solve () { double x1, y1, x2, y2, x3, y3, x4, y4; std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4; double A = x1 - x3; double B = x2 - x1; double C = -(x4 - x3); double D = y1 - y3; double E = y2 - y1; double F = -(y4 - y3); double a = B * B + E * E; double b = 2 * (A * B + D * E); double c = C * C + F * F; double d = 2 * (A * C + D * F); double e = 2 * (B * C + E * F); double f = A * A + D * D; double ans = a / 3.0 + b / 2.0 + c / 3.0 + d / 2.0 + e / 4.0 + f; std::cout << std::fixed << std::setprecision (10 ) << ans << "\n" ; }int main () { std::ios::sync_with_stdio (0 ); std::cin.tie (0 ), std::cout.tie (0 ); int t; std::cin >> t; while (t--) { solve (); } return 0 ; }