我的提交記錄與結果
一、 單項選擇題
-
以比較為基本運算,對於 \(2n\) 個數,同時找到最大值和最小值,最壞情況下需要的最小的比較次數為( )。
\(\texttt A\). 4n-2
\(\texttt B\). 3n+1
\(\color{#5eb95e}\texttt{C}\). 3n-2
\(\color{#e74c3c}\texttt D\). 2n+1【解析】:
首先先將原陣列兩兩分組。每組求一個最大,一個最小。使用 \(n\) 次。
這樣化成 \(n\) 組最大和最小。此時直接最大與最大進行比較,最小與最小進行比較,使用 \(2n-2\) 次。
總共有 \(n+2n-2=3n-2\) 次。
【反思】:
思維不夠。
-
G 是一個非連通簡單無向圖(沒有自環和重邊),共有 36 條邊,則該圖至少有( )個點。
\(\texttt A\). 8
\(\color{#e74c3c}\texttt B\). 9
\(\color{#5eb95e}\texttt C\). 10
\(\texttt D\). 11【反思】:
審題不認真:
G 是一個非連通簡單無向圖(沒有自環和重邊),共有 36 條邊,則該圖至少有( )個點。
-
前序遍歷和中序遍歷相同的二叉樹為且僅為( )。
\(\texttt A\). 只有 1 個點的二叉樹
\(\color{#e74c3c}\texttt B\). 根結點沒有左子樹的二叉樹
\(\texttt C\). 非葉子結點只有左子樹的二叉樹
\(\color{#5eb95e}\texttt D\). 非葉子結點只有右子樹的二叉樹【反思】:
不要只考慮根的情況,在遍歷中,所有部分都是根。
二、閱讀程式
(一)
#include <iostream>
02 #include <cmath>
03 using namespace std;
04
05 const double r = acos(0.5);
06
07 int a1, b1, c1, d1;
08 int a2, b2, c2, d2;
09
10 inline int sq(const int x) { return x * x; }
11 inline int cu(const int x) { return x * x * x; }
12
13 int main()
14 {
15 cout.flags(ios::fixed);
16 cout.precision(4);
17
18 cin >> a1 >> b1 >> c1 >> d1;
19 cin >> a2 >> b2 >> c2 >> d2;
20
21 int t = sq(a1 - a2) + sq(b1 - b2) + sq(c1 - c2);
22
23 if (t <= sq(d2 - d1)) cout << cu(min(d1, d2)) * r * 4;
24 else if (t >= sq(d2 + d1)) cout << 0;
25 else {
26 double x = d1 - (sq(d1) - sq(d2) + t) / sqrt(t) / 2;
27 double y = d2 - (sq(d2) - sq(d1) + t) / sqrt(t) / 2;
28 cout << (x * x * (3 * d1 - x) + y * y * (3 * d2 - y)) * r;
29 }
30 cout << endl;
31 return 0;
32 }