【題解】 Codeforces Round #661 (Div. 3)
阿新 • • 發佈:2020-09-12
當你心情不好的時候 \(\textrm{vp}\) 一場 \(\textrm{div3}\) 就好了。
Link \(\textrm{to Codeforces}\)。
A. Remove Smallest
Legend
給定長 \(n\ (1 \le n \le 50)\) 的陣列 \(a\ (1 \le a_i \le 100)\),你每次可以選兩個差的絕對值不超過 \(1\) 的兩個數出來,並丟掉一個,放回去一個。問是否能最後讓陣列只剩一個元素?
資料組數 \(1 \le t\le 1000\)。
Editorial
排序後判斷相鄰的數字是否相差不超過 \(1\)。
Code
void solve(){ int n; cin >> n; for(int i = 1 ; i <= n ; ++i) cin >> a[i]; std::sort(a + 1 ,a + 1 + n); for(int i = 2 ; i <= n ; ++i){ if(a[i] - a[i - 1] > 1){ puts("NO"); return; } } puts("YES"); }
B. Gifts Fixing
Legend
給定長度為 \(n\ (1 \le n \le 50)\) 的陣列 \(a,b\ (1 \le a_i,b_i \le 10^9)\),你每次可以做以下操作之一:
- \(a_i \gets a_i - 1\)
- \(b_i \gets b_i - 1\)
- \(a_i \gets a_i - 1\),\(b_i \gets b_i - 1\)。
\(a_i,b_i\) 不能變為負數。請問使得 \(a\) 中每個數都相等且 \(b\) 中每個數都相等的最少操作次數。
資料組數 \(1 \le t\le 1000\)。
Editorial
顯然要把 \(a\) 裡的數全變成 \(\min a_i\)
Code
void solve(){ int n; cin >> n; int mna = 1e9 ,mnb = 1e9; for(int i = 1 ; i <= n ; ++i){ cin >> a[i]; mna = min(mna ,a[i]); } for(int i = 1 ; i <= n ; ++i){ cin >> b[i]; mnb = min(mnb ,b[i]); } long long Ans = 0; for(int i = 1 ; i <= n ; ++i){ int common = min(a[i] - mna ,b[i] - mnb); Ans += a[i] + b[i] - mna - mnb - common; } printf("%lld\n" ,Ans); }
C. Boats Competition
Legend
給定長度為 \(n\ (1 \le n \le 50)\) 的陣列 \(a,b\ (1 \le a_i,b_i \le n)\),你每次可以做以下操作之一: