# 11/17 期中考 連結 -- https://hackmd.io/@sa072686/SJyPwnZ4p 題目(共四題) -- * **PA** **題意** : ::: success 兩個陣列長度為 $n$ 求操作 $K$ 次能讓兩個陣列相等 每次只能動陣列一個數字$\pm1$ ::: **解題思路** : ::: info 先計算整體陣列需要的移動次數 然後再計算 ==K-移動次數== 是否是偶數 ::: :::spoiler **程式碼** : ```cpp= #include <iostream> #include <vector> using namespace std; int main() { long long n, k; cin >> n >> k; vector<long long> lista(n); vector<long long> listb(n); for(int i = 0; i <n; i++) { cin >> lista[i]; } for(int i = 0; i <n; i++) { cin >> listb[i]; } long long sum = 0; for(int i = 0; i<n; i++) { sum += abs(lista[i]-listb[i]); } if((k-sum)%2==0 && !(k-sum <0)) { cout << "Yes\n"; } else cout << "No\n"; return 0; } ``` ::: **解題心得** : :::warning 這題卡最久 因為我那時候直接用K-sum 沒有負數判斷就錯了 (就因為這題沒拿到第一… ::: * **PB** : **題意** : ::: success 有 $n$ 個數字 然後 $s$ 次操作 最後要選到 $p$ ::: **解題思路** : :::info 檢測那行有沒有 $p$ 就行 ::: :::spoiler **程式碼** ``` cpp= #include <iostream> using namespace std; int main() { int n, p, s; cin >> n >> p >> s; for(int k = 0; k < s; k++) { int m; cin >> m; bool ok = false; for(int i = 0; i < m; i++) { int a; cin >> a; if(a==p) { ok = true; } } cout << (ok ? "KEEP\n" : "REMOVE\n"); } return 0; } ``` ::: **解題心得** : :::warning 看題目看很久 但是做起來很快 ::: * **PC** : **題意** : ::: success $A$ 秒到 $B$ 秒一個線段 $C$ 到 $D$ 也是一個線段 求疊合 ::: **解題思路** : :::info 令a<c, b>d 求d-c就行 ::: :::spoiler **程式碼** ```cpp= #include <iostream> using namespace std; int main() { int a, b, c, d; cin >> a >> b >> c >> d; if(a>c) {swap(a, c);} if(b<d) {swap(b, d);} cout << (d-c <0 ? 0 : d-c) << endl; return 0; } ``` ::: **解題心得** : :::warning 一開始還打算用很多個if else 下去判斷 但是想想又覺得用排序就行 但是到最後才想出來數線解法哈哈 最後發現(其實用`max`跟`min`就行;: ::: * **PD** : **題意** : ::: success N長度的陣列 然後[index]= P 求一個陣列Q[P]之值 ::: **解題思路** : :::info 用`map`直接紀錄P跟index 然後轉換方式輸出就行 ::: :::spoiler **程式碼** ```cpp= #include <iostream> #include <vector> #include <map> using namespace std; int main() { int n; cin >> n; map<int, int> list; for(int i =1; i<=n; i++) { int a; cin >> a; list[a] = i; } for(const auto &d : list) { cout << d.second << ' '; } cout << endl; return 0; } ``` ::: **解題心得** : :::warning 那時候被第一題干擾心態(藉口 所以沒有第一時間就想到`map`的解@@ ::: 賽後心得 -- 這次算是比較難一點的題目了 但最主要難過的還是我每次都錯在小地方@@ 附上照片 : ![螢幕擷取畫面 2024-01-05 213139](https://hackmd.io/_uploads/HJtfStHOa.png)