constint N = 2 * 10e5 + 1; int a[N], b[N]; voidsolve() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } int A = 0, B = 0, C = 0; for (int i = 0; i < n; i++) { cin >> b[i]; if (a[i] > b[i]) { A += a[i]; } elseif (a[i] < b[i]) { B += b[i]; } elseif (a[i] == 1) { C++; } elseif (a[i] == -1) { C++; A--; B--; } }
int ans = min(A + C, min(B + C, (A + B + C) >>1));//右移1位相当于除以2,这个只有正数适用,而负数不适用。重要! cout << ans << endl; } signedmain() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; cin >> t; while (t--) { solve(); } return0; }
问题
贪错了,用栈的思想不对。
小技巧
alt 键可以生成多个光标。
用signed main,然后可以定义:#define int LL
多个值比较
1 2
int max_of_three = std::max({p, q, r}); int min_of_three = std::min({p, q, r});