匹配(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 模拟赛 匹配 //贪婪策略的更多相关文章

  1. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  2. NOIP模拟赛-2018.11.5

    NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  5. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  6. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  7. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  8. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  9. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

随机推荐

  1. redis使用心得

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com   redis是继memcached之后兴起的内存数据库,作者非常崇尚简洁高效,力求以最简单的方式最高效的解决问题 ...

  2. mac命令

    mac下卸载nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}xc ...

  3. JavaScript高级-定义函数(类)方法

    1.定义普通函数(常用) //1.普通函数 function defineFun1(p1, p2) { return p1 + p2; } 2.定义匿名函数(最常用) //2.匿名函数 var def ...

  4. Java中常用修饰符使用汇总

    修饰符汇总: 一:public protected default private 修饰类,修饰方法,修饰属性,修饰代码块.  类: 顶级类只能用public 修饰,顶级类不能使用private 和p ...

  5. 用css3实现各种图标效果(2)

    写在前面 写的一模一样的css样式,结果却导致原来出来不一样的效果图. 用chrome的开发者工具查看,比较起来还是一模一样的css样式,可为什么会出现不一样的placeholder效果呢?一个白色粗 ...

  6. Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念

    PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了.通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理.可以 ...

  7. document对象

    document 对象是操作网页内容的 找元素 1.根据id找 document.getElementById(); 2.根据class找 document.getElementsByClassNam ...

  8. fir.im Weekly - 600个 Android 开源项目汇总

    本期 Weekly 收集了一些热度资源,包含 Android.iOS 开发工具与源码分享,程序员也应该了解的产品运营.设计等 Tips ,希望对你有帮助. 600个Android开源项目汇总 勤劳的 ...

  9. 事件异步(EAP)使用事件异步处理一些耗时操作

    比如需要下载一些比较大的文件,如果使用会UI卡顿,使用异步可以节省一些时间 下面是一些例子: using System; using System.Collections.Generic; using ...

  10. 初次使用IDEA的相关技巧

    前言:由于初次使用IDEA,所以很多配置都不是非常熟悉,经过一下午慢慢熟悉和同事的帮助,终于有所斩获,现在我把这个总结写出来,希望能够帮助初次使用的java工程师. 1:下载和安装 下载地址:http ...