资源描述:
《noipxx提高组复赛解题报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划noipXX提高组复赛解题报告 铺地毯 【问题描述】 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照 编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。 地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形 地毯边界和四个顶点上的点也算被地毯覆盖。 【输入】 输入文件名为。 输入共n+2行。 第一行,一个整数n,表示总
2、共有n张地毯。 接下来的n行中,第i+1行表示编号i的地毯的信息,包含四个正整数a,b,g,k,每 两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标以及地毯在x 轴和y轴方向的长度。目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 第n+2行包含两个正整数x和y,表示所求的地面的点的坐标。 【输出】 输出文件名为。 输出共1行,一个整数,表示所求的地毯的编号;若此处没
3、有被地毯覆盖则输出-1。 【输入输出样例】 3 1023 0233 2133 22 3 3 【解题报告】 从后往前扫,找到第一个覆盖这个点的就输出,否则无解。 programcarpet; usessysutils; var n,i,a,b:longint; x2,x1,y1,y2:array[0..]oflongint; time:extended;目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安
4、保从业人员的业务技能及个人素质的培训计划 proceduremain; begin readln(n); fori:=1tondo begin readln(x1[i],y1[i],a,b); x2[i]:=x1[i]+a; y2[i]:=y1[i]+b; end; readln(a,b); fori:=ndownto1doif(a=x1[i])and(b>=y1[i])and(bj) sum[i,j]=sum[i-1,j]+1(color[i]=j) 这里要用O(NK)的复杂度,是算法的瓶颈所在,不过对于题中的数据范围已经足够了。并且具体实现可以先用
5、数组赋值sum[i]=sum[i-1],然后再为 sum[i,color[i]]+1,应该会快很多。 我们还需要解决的问题就是,已知了L,如何快速找到R的可行范围?再次注意区间内必须要存在一个咖啡店最低消费不超过P。目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 因此,如果L就是一个最低消费不超过P的咖啡店,那么R可以取到[L+1,n]中所有色调为color[L]的客栈,即ans=a
6、ns+sum[n,color[L]]-sum[L,color[L]];如果L是一个最低消费超过P的咖啡店,那么我们要找到一个T∈[L+1,n],且咖啡店T的最低消费不超过P,那么R就可以取到[T,n]中所有色调为color[L]的客栈,即ans=ans+sum[n,color[L]]-sum[T-1,color[L]]。 问题是我们如何找到这个T,其实很简单,二分查找即可。再次预设一个数组,保存所有最低消费不超过P的咖啡店序号,二分查找L即可。注意这里L一定不存在这个数组中,因此找到的应该是最靠近L且大于L的序号,细节处理很重要。找不到返回-1,不用累加ans就是了。 ③:
7、O(nlogn) 这个办法比②更优一些。来自Clarkok的做法。 用list[i,j]表示颜色为i的第j个客栈,也就是将客栈按照颜色紧缩存储。另用pos[i]表示第i个旅馆在list[color[i]]中的位置。用线段树/ST算法(推荐)预处理出区间消费的最小值,也就是min{cost[i..j]},易得到min[k,i]是非增的,注意这是后面二分的关键。 然后枚举第二个人,在list[color[i]]中用二分找到一个j满足min[j,i]=r(i),那么第1~r(i)号旅馆中,所