1034: [ZJOI2008]泡泡堂BNB

本文介绍了ZJOI2008泡泡堂BNB问题的解决思路,通过一种正确的贪心策略来实现最优解。具体来说,采用小的胜小的,大的胜大的策略,并对特殊情况进行了处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1034: [ZJOI2008]泡泡堂BNB

链接

分析:

  开始想的贪心是尽量小去胜或者平最小的,但是无法处理胜还是平的问题,比如3,5和4,5。。。

  正确的贪心:小的胜小的,大的胜大的,如果小的无法胜小的,大的无法胜大的,那么用A中小的去和B中大的比,相当于A中小的左移一位,然后和B小的比,B最大的右移一位,和A中最大的比。

代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 
 5 inline int read() {
 6     int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
 7     for (;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
 8 }
 9 
10 const int N = 100100;
11 int a[N],b[N];
12 
13 int work(int n,int *a,int *b) {
14     int L1 = 1,R1 = n,L2 = 1,R2 = n,ans = 0;
15     while (L1 <= R1 && L2 <= R2) {
16         if (a[L1] > b[L2]) ans+=2, L1++, L2++;
17         else if (a[R1] > b[R2]) ans += 2, R1--, R2--;
18         else {
19             ans += (a[L1] == b[R2]); L1++; R2--;
20         }
21     }
22     return ans;
23 }
24 
25 int main() {
26     int n = read();
27     for (int i=1; i<=n; ++i) a[i] = read();
28     for (int i=1; i<=n; ++i) b[i] = read();
29     sort(a+1,a+n+1);
30     sort(b+1,b+n+1);    
31     cout << work(n,a,b) << " " << 2 * n - work(n,b,a);
32     return 0;
33 }

 

转载于:https://www.cnblogs.com/mjtcn/p/9268511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值