noip 模拟赛 匹配 //贪婪策略
匹配(match.pas/match.c/match.cpp)
[题目描述]
到了新的学期,Mcx痛苦的发现通用技术课居然是有实验课的,这样的话他就不得不放弃写作业的想法而去做一件类似于搭积木的事情。一次实验课上,他发现所给的材料有许许多多的长积木,其中黄色的有n条,第i条的长度为Ai;蓝色的有m条,第j条的长度为Bj。于是他想:这些积木可以组成多少对导轨呢?每对导轨由一条黄色积木和一条蓝色积木组成,每条积木只能用一次。为了美观,当且仅当Ai– x <= Bj <= Ai + y的时候,两条积木才能组成一对导轨。x,y为给定的非负整数。
[题目输入]
第一行四个数n,m,x,y,具体含义见题目描述。
第二行n个数,第i个数表示第i条黄色积木的长度,每两个数之间有一个空格。
第三行m个数,第i个数表示第i条蓝色积木的长度,每两个数之间有一个空格。
[题目输出]
仅一行一个非负整数,表示所能组成的导轨对数的最大值。
[样例输入]
5 3 0 0
1 2 3 3 4
1 3 5
[样例输出]
2
[样例解释]
样例中x,y均为0,故只有当Ai=Bj的时候才能组成一对导轨。
方案为第一条黄色积木和第一条蓝色积木一组,第二条蓝色积木和第三或第四条黄色积木一组。
[数据范围]
50%的数据满足1<= n , m <= 1000
100%的数据满足1<= n , m <= 100000
100%的数据满足0<= x , y , Ai , Bi <= 10^9
100%的数据满足,Ai与Bi一定为升序排列。
分析:
拿到这道题,其实首先可以想到如果数据小,用匈牙利算法是可以跑下来的。但是很不巧,我不会。考虑别的做法,发现如果我们瞎基本贪心。好像可以做诶。接下来就是如果瞎基本贪心?很显然我们在这里如果每次都选择符合要求区间内最小值。由于序列成单调递增。那么我们可以保证,每次最先让前面的匹配。
假设Ai<=Aj 还有Bi<Bj 。而且保证Ai Aj与Bi Bj 都可以互相满足要求。那么如果我们Ai与Bj Aj与Bi匹配 这种方式与Ai与Bi Aj与Bj匹配这两种方式是完全一样的。那么我们可以选择有序 第二种方式 这样可以保证最优。(如果在这里的条件改变Ai不与Bj相匹配,那么第二种方式也是最优的。)(如果这里的条件再改变如果Ai与Aj只能与Bi匹配,那么两者只能择一)所以我们如果从头瞎基本贪心是可以保证最优解的。
放出代码:这里要注意边界判断与及时对循环终止。
#include<cstdio>
#include<algorithm>
using namespace std;
int A[100010],B[100010],n,m,x,y,ans;
int main()
{
freopen("match.in","r",stdin);
freopen("match.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=1;i<=n;++i)
scanf("%d",&A[i]);
for(int i=1;i<=m;++i)
scanf("%d",&B[i]);
int head;
for(int i=1;i<=m;++i)
{
if(B[i]>=A[1]-x){
head=i;
break;
}
}
int i=1;
while(i<=n)
{
while(1){
if(B[head]<A[i]-x){++head ;if(head>m)break; continue;}
if(B[head]>A[i]+y)break;
++ans;
++head;
break;
}
++i;
if(head>m)break;
}
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
noip 模拟赛 匹配 //贪婪策略的更多相关文章
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- NOIP模拟赛-2018.11.5
NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
随机推荐
- 基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用
大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中 ...
- 作业3.2:psp
PSP2.1 Personal Software Process Stages Time Planning 计划 20min Estimate 估计这个任务需要多长时间 3.5h Developmen ...
- Intellij修改archetype Plugin配置
Maven archetype plugin为我们提供了方便的创建 project功能,Archtype指我们项目的骨架,作为项目的脚手架. 如fornt end的yo之类.我们能够通过简单的一行控制 ...
- Word发布博客测试
/// <summary> /// Main相当于Windows服务的Start方法 主要负责初始化的工作 /// </summary> /// <param name= ...
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
概要 Java的JUC(java.util.concurrent)包中的锁包括"独占锁"和"共享锁".在“Java多线程系列--“JUC锁”02之 互斥锁Ree ...
- 利用IFormattable接口自动参数化Sql语句
提要 string.Format("{0},{1}",a,b)的用法大家都不陌生了,在很多项目中都会发现很多sql语句存在这样拼接的问题,这种做法很多"懒"程序 ...
- 跨站脚本攻击XSS
跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到 ...
- Spring Trasnaction管理(1)- 线程间事务隔离
问题导读 Spring中事务是如何实现的 Spring中各个线程间是如何进行连接.事务隔离的 Spring事务配置 Spring的事务管理应该是日常开发中总会碰到的,但是Spring具体是怎么实现线程 ...
- _学生选课数据库SQL语句练习题
1. 查询Student表中的所有记录的Sname.Ssex和Class列. select Sname,Ssex,t.sclass from STUDENT t 2. 查询教师所有的单位即不重复的De ...
- salesforce 零基础学习(三十七) DML及Database方法简单描述
在apex中通过soql查询可以使用两种方式,使用DML语句或者使用Database的方法. 使用DML语句和使用Database类的方法对于我们来说用的都很多,并且都很常见.对于数据库常见的操作:增 ...