bzoj 1034 [ ZJOI 2008 ] 泡泡堂BNB —— 贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1034
一开始想了个很麻烦的贪心做法,对于每个 a[i],找第一个大于它的 b 匹配……
然后WA...因为这样好像没有利用不能第一次匹配的值使答案更优;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int const maxn=1e5+;
int n,a[maxn],b[maxn],mx,mn;
bool vis1[maxn];
priority_queue<int>q;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)scanf("%d",&b[i]);
sort(a+,a+n+); sort(b+,b+n+);
int t=;
for(int i=;i<=n;i++)
{
while(b[t]<=a[i]&&t<=n)q.push(b[t]),t++;
if(t>n)break;
vis1[i]=; t++;
}
for(int i=;i<=n;i++)
{
if(vis1[i])continue;
int x=q.top(); q.pop();
if(a[i]==x)mn++;
else mn+=;
}
memset(vis1,,sizeof vis1);
while(q.size())q.pop();
t=n;
for(int i=n;i;i--)
{
while(b[t]>=a[i]&&t)q.push(-b[t]),t--;
if(!t)break;
vis1[i]=; t--; mx+=;
}
for(int i=n;i;i--)
{
if(vis1[i])continue;
int x=-q.top(); q.pop();
if(a[i]==x)mx++;
}
printf("%d %d",mx,mn);
return ;
}
囧
优美的正解贪心不是全局考虑,而是每次考虑最大值和最小值;
如果最小值能盖过对方的最小值或最大值能盖过对方的最大值,就直接进行;
不行就用自己的最小值匹配对方的最大值,让答案最优。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=1e5+;
int n,a[maxn],b[maxn];
int solve(int a[],int b[])
{
int ans=,l1=,l2=,r1=n,r2=n;
while(l1<=r1&&l2<=r2)
{
if(a[l1]>b[l2])ans+=,l1++,l2++;
else if(a[r1]>b[r2])ans+=,r1--,r2--;
else ans+=(a[l1]==b[r2]),l1++,r2--;//
}
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=n;i++)scanf("%d",&b[i]);
sort(a+,a+n+); sort(b+,b+n+);
printf("%d %d",solve(a,b),*n-solve(b,a));
return ;
}
bzoj 1034 [ ZJOI 2008 ] 泡泡堂BNB —— 贪心的更多相关文章
- [ZJOI 2008]泡泡堂BNB
Description 题库链接 双方 \(n\) 人,给出每人的战斗力,赢一场加 \(2\) 分,平局 \(1\) 分,失败不得分.求最大和最小的得分. \(1\leq n\leq 100000\) ...
- 【BZOJ 1034】[ZJOI2008]泡泡堂BNB
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1034 [题意] [题解] 如果己方最小的大于对方最小的(严格大于) 或己方最大的大于对 ...
- 【题解】BZOJ1034 [ZJOI2008]泡泡堂BNB(贪心)
[题解]BZOJ1034 [ZJOI2008]泡泡堂BNB(贪心) 考虑直接模拟田忌赛马... 我的最小比你的大,直接上 我的最大比你的大,直接上 otherwise,我小换你大 考虑最劣,由于每次比 ...
- BZOJ 1034 泡泡堂BNB 贪心+简单博弈
同样是今天做bzoj时做到的,感觉能力范围之内的就做了,也是蛮简单的 1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MB Su ...
- BZOJ 1034: [ZJOI2008]泡泡堂BNB( 贪心 )
贪心...用最弱的赢最弱的,用最强的赢最强的,否则用最弱的和最强的比... (贴个官方题解:将双方的选手均按从强到弱排序,然后第一次扫描尽可能用当前剩下的选手中能赢对手当前最强选手中最弱的一个去赢得胜 ...
- BZOJ [ZJOI2008]泡泡堂BNB 贪心
[ZJOI2008]泡泡堂BNB Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/proble ...
- [BZOJ1034][ZJOI2008]泡泡堂BNB 贪心
1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3414 Solved: 1739 [Submit][ ...
- 【BZOJ1034】[ZJOI2008]泡泡堂BNB 贪心
Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...
- BZOJ 1034: [ZJOI2008]泡泡堂BNB 贪心+排序
比较神奇的贪心 有点类似于田忌赛马. 如果我方最弱强于对面最弱,则直接最弱pk最弱. 如果我方最强强于对面最强,那么直接最强间pk. 否则,试着用我方最弱 pk 对方最强,看是否能打成平手. code ...
随机推荐
- Windows下环境变量显示、设置或删除操作详情
显示.设置或删除 cmd.exe 环境变量. SET [variable=[string]] variable 指定环境变量名. string 指定要指派给变量的一系列字符串. 要显示当前环境变量,键 ...
- windows 设置注册表服务自动启动
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\xxx\Start = ,=自动,,=禁用
- 谷歌浏览器中a:link设置字体颜色无效问题
<div id="box"> <a href="#">111111</a> <a href=""& ...
- SqlServer IsNull 与 NullIf
ISNULL(check_expression, replacement_value) check_expression 与 replacement_value 数据类型必须一致,如果 check_e ...
- 【原创】使用HTML5+canvas+JavaScript开发的原生中国象棋游戏及源码分享
目前已经实现的功能: V1.0 : 实现棋子的布局,画布及游戏场景的初始化V2.0 : 实现棋子的颜色改变V3.0 :实现所有象棋的走棋规则V4.0 : 实现所有棋子的吃子功能 GItHub源码下载地 ...
- 从0开始复习JS---1、函数复习
1. 写一个函数,实现对数字数组的排序. function get_order(array){ for(var i = 0; i <array.length-1; i++){ for(var j ...
- Redis防护建议
1.Redis本身防护 (1)不要使用默认端口(6379) (2)增加Redis用户名和密码 (3)在Redis绑定指定IP访问(位置配置文件[redis.config]中的bind节点)2.L ...
- java折半插入排序
代码如下: public class BinaryInsertSort { public static void binaryInsertSort(DataWrap [] data) { System ...
- 第二节:web爬虫之lxml解析库
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高.
- zabbix 配置——bak
1.host 配置 create host Parameter Description Host name 主机名,只允许数字,空格,句号,下划线,非主流符号它不支持.zabbix客户端配置文件中的h ...