【NOIP模拟赛】【乱搞AC】【贪心】【模拟】匹配

匹配

(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一定为升序排列。

【Solution】

  千万别想复杂!!!!!千万别想复杂!!!!!千万别想复杂!!!!!

  首先用两个指针L、R分别指向黄色积木当前砖块和蓝色积木当前砖块,初始指向第一个积木。如果当前黄色积木符合蓝色积木要求,则记录答案并使LR指针都往后移一位。如果当前蓝色积木长度比当前黄色积木长度减X还要小,那么只后移R指针。如果当前蓝色积木长度比当前黄色积木长度加Y还要大,那么之后移L指针。

  AC代码:

 1 #include <cstdio>
 2 int N,M,X,Y,L=1,R=1;
 3 int ylw[100010],ble[100010];
 4 long long ans;
 5 int main(){
 6     scanf("%d%d%d%d",&N,&M,&X,&Y);
 7     for(int i=1;i<=N;++i) scanf("%d",&ylw[i]);
 8     for(int i=1;i<=M;++i) scanf("%d",&ble[i]);
 9     while(L<=N&&R<=N){
10         if(ble[R]>ylw[N]+Y||ble[M]<ylw[1]-X) break;//特判掉极端情况
11         if(ble[R]>=ylw[L]-X&&ble[R]<=ylw[L]+Y) {++ans;++L;++R;continue;}
12         if(ble[R]<ylw[L]-X) {++R;continue;}
13         if(ble[R]>ylw[L]+Y) {++L;continue;}
14         ++L; ++R;
15     }
16     printf("%I64d",ans);
17     return 0;
18 }
时间: 2024-12-17 01:24:00

【NOIP模拟赛】【乱搞AC】【贪心】【模拟】匹配的相关文章

【NOIP模拟赛】【乱搞AC】【奇技淫巧】【乘法原理】回文串计数

回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他走向了以记忆量大而闻名的生物竞赛.然而,他很快发现这并不能满足他热爱背诵的心,但是作为一名强大的Boer,他找到了这么一条自虐的方式--背诵基因序列.不过这实在是太虐心了,就连Mcx也有些招架不住.不过他发现,如果他能事先知道这个序列里有多少对互不相交的回文串,他或许可以找到记忆的妙法.为了进一步验证这个方法,M

January 24th 模拟赛A T3【NOI2014模拟】数列 Solution

题目空降 Description 给定一个长度为\(n\)的正整数数列\(a_i\). 定义两个位置的\(f\)为两者位置差与数值差的和,即\(f_{x,y}=|x-y|+|a_x-a_y|\). 你需要写一个程序支持两种操作(\(k\)都是正整数): Modify x k:将第\(x\)个数的值修改为\(k\). Query x k:询问有几个\(i\)满足\(f_{x,i}\leq k\). 询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的\(a_x\)

[CSP-S模拟测试]:字符交换(贪心+模拟)

题目传送门(内部题136) 输入格式 输入文件第一行为两个正整数$n,k$,第二行为一个长度为$n$的小写字母字符串$s$. 输出格式 输出一个整数,为对字符串$s$进行至多$k$次交换相邻字符的操作后,字符串$s$可能达到的最大的$m$指标. 样例 样例输入: 6 3abacba 样例输出: 3 数据范围与提示 对于$40\%$的数据,满足$n\leqslant 10$. 对于$70\%$的数据,满足$n\leqslant 200$. 对于$100\%$的数据,满足$1\leqslant n\

【NOIP模拟赛】与非 乱搞

biubiu~~~ 正解是线段树维护真值表,但是我觉得对于这道题来说乱搞就够了....... 我们发现如果我们把每一个数都一开始取反就会发现对于最后结果来说 x=x^1,x nand x=x|x ,x nand x nand x=x|x^1|x,x nand x nand x nand x=x|x^1|x^1|x.....而且我们还发现|0是无效,而且|1之后如有操作择从0开始若无操作则为1,那么我们可以维护我们处理过的x在序列上的前缀和以及他们从一开始进行操作然后每一位都停止一次的前缀答案和,

【NOIP模拟赛】beautiful 乱搞(平衡树)+ST

biubiu~~~ 我用平衡树处理的这道题,然而这种方法还是要看评测姬..... 正解是乱搞....就是枚举每一位数作为中位数,比他小的看做-1比他大的看做1,那么我们从一开始就有了一个绵延的山,我们记录这个数之前出现过的距水平线高度差,如果我们在右边找到了这个同样的距离就意味着我们中间的操作为0那么在这两个相同水平面之前的距离就是他作为中位数的一个区间. 似乎这是一种中位数套路........ #include <cstdio> namespace Pre{ inline void read

2017.11.25【NOIP提高组】模拟赛A组

2017.11.25[NOIP提高组]模拟赛A组 T1 3467. [NOIP2013模拟联考7]最长上升子序列(lis) T2 3468. [NOIP2013模拟联考7]OSU!(osu) T3 3472. [NOIP2013模拟联考8]匹配(match) T1 有转移方程f[i]=max{f[j]}+1,a[j]<a[i] 可以用线段树+离散化维护这个方程,因为涉及以往状态可以用主席树维护 打太丑爆空间了 Code 1 #include<cstdio> 2 #include<c

2017.12.09【NOIP提高组】模拟赛A组

2017.12.09[NOIP提高组]模拟赛A组 T1 3489. [NOIP2013模拟联考11]数列的GCD(gcd) T2 3500.[NOIP2013模拟联考15]物语(monogatari) T3 3501.[NOIP2013模拟联考15]消息传递(news) 吐槽:这次的题好像有点水啊,但最简单的第二题都给打挂啦!!(数组开小了) T1 本套题中最难的题.考虑dp 设f[i]是b[1],b[2]...b[N]的最大公约数的数目,g[i]是b[1],b[2]...b[N]的公约数的数目

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况

【noip模拟赛】 射击

这题似乎是什么安阳一中的模拟题,不管了,反正是学长出的noip模拟赛里面的题目.... 射击(shoot.pas/.c/.cpp) 时间限制:1s,内存限制128MB 题目描述: 据史书记载,对越反击战时期,有位中国侦察兵,他的代号叫814.一天他执行狙击任务,他的任务地区是n座恰巧在一条直线上的山.这些山所在直线恰巧为东西走向,山从东到西依次编号为1~n.一天814隐藏在编号为k的山上,每座山上都有1个目标. 814也非常的厉害,任务结束时杀了很多人,可是史书中只记载了两点: 1:814一定攻