BZOJ1034
-
题目
-
分析
比较神的贪心
分三种情况:
- 我方最弱的比对方最弱的强,稳拿两分
- 我方最强的比对方最强的强,稳拿两分
- 我方最弱的和对方最强的同一个实力,拿一分
最后实在不行让最弱的去
送对方最强的人头 -
代码
const int N = 1e5 + 5; int a[N]; int b[N]; int n; int solve(int a[], int b[]) { int la = 1; int ra = n; int lb = 1; int rb = n; int ans = 0; while (la <= ra && lb <= rb) { if (a[la] > b[lb]) {ans += 2; la++; lb++;} else if (a[ra] > b[rb]) {ans += 2; ra--; rb--;} else { ans += (a[la] == b[rb]); la++; rb--; } } return ans; } int main () { //freopen("input.in", "r", stdin); //freopen("test.out", "w", stdout); //int n; read(n); for (int i = 1; i <= n; i++) read(a[i]); for (int i = 1; i <= n; i++) read(b[i]); sort(a + 1, a + n + 1); sort(b + 1, b + n + 1); cout << solve(a, b) <<" "<< 2 * n - solve(b, a) << endl; return 0 ; }
-
题型
贪心