NOIP2011提高组解题报告day1.docx





《NOIP2011提高组解题报告day1.docx》由会员分享,可在线阅读,更多相关《NOIP2011提高组解题报告day1.docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、NOIP2011提高组解题报告day1NOIP2020提高组解题报告day1(2020-12-1309:29:54)标签:杂谈铺地毯【问题描绘】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域可看做是平面直角坐标系的第一象限铺上一些矩形地毯。一共有n张地毯,编号从1到n。如今将这些地毯根据编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。【输入】输入文件名为carpet.in。输入共n+2行。第一行,一个整数n,表示总共有n张地毯。接下来的
2、n行中,第i+1行表示编号i的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标a,b以及地毯在x轴和y轴方向的长度。第n+2行包含两个正整数x和y,表示所求的地面的点的坐标x,y。【输出】输出文件名为carpet.out。输出共1行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。【输入输出样例】carpet.in3102302332133223carpet.out3【解题报告】从后往前扫,找到第一个覆盖这个点的就输出,否则无解。programcarpet;/usessysutils;varn,i,a,b:longint;x
3、2,x1,y1,y2:array0.100001oflongint;/time:extended;proceduremain;beginreadln(n);当前位置:文档视界NOIP2020提高组解题报告day1NOIP2020提高组解题报告day1是若选择住4、5号客栈的话,4、5号客栈之间的咖啡店的最低消费是4,而两人能承受的最低消费是3元,所以不知足要求。因而只要前3种方案可选。【数据范围】对于30%的数据,有n100;对于50%的数据,有n1,000;对于100%的数据,有2n200,000,0j)sumi,j=sumi-1,j+1(colori=j)这里要用O(NK)的复杂度,是算法
4、的瓶颈所在,不过对于题中的数据范围已经足够了。并且详细实现能够先用数组赋值sumi=sumi-1,然后再为sumi,colori+1,应该会快很多。我们还需要解决的问题就是,已知了L,怎样快速找到R的可行范围?再次注意区间内必需要存在一个咖啡店最低消费不超过P。因而,假如L就是一个最低消费不超过P的咖啡店,那么R能够取到L+1,n中所有色调为colorL的客栈,即ans=ans+sumn,colorL-sumL,colorL;假如L是一个最低消费超过P的咖啡店,那么我们要找到一个TL+1,n,且咖啡店T的最低消费不超过P,那么R就能够取到T,n中所有色调为colorL的客栈,即ans=ans+
5、sumn,colorL-sumT-1,colorL。问题是我们怎样找到这个T,其实很简单,二分查找即可。再次预设一个数组,保存所有最低消费不超过P的咖啡店序号,二分查找L即可。注意这里L一定不存在这个数组中,因而找到的应该是最靠近L且大于L的序号,细节处理很重要。找不到返回-1,不用累加ans就是了。:O(nlogn)这个办法比更优一些。来自Clarkok的做法。用listi,j表示颜色为i的第j个客栈,也就是将客栈根据颜色紧缩存储。另用posi表示第i个旅馆在listcolori中的位置。用线段树/ST算法(推荐)预处理出区间消费的最小值,也就是mincosti.j,易得到mink,i是非增
6、的,注意这是后面二分的关键。然后枚举第二个人,在listcolori中用二分找到一个j知足minj,i=r(i),那么第1r(i)号旅馆中,所有与第i号旅馆色调一样的旅馆到第i号旅馆的路上必然存在一个旅馆的最低消费不大于p。故此时count2(i)=count1(i)。从1到n扫描一次即可,时间复杂度O(n)。详细实现时能够将数组压缩,空间复杂度O(k)。【时间复杂度】最低O(n)/O(nk)programhotel;/usessysutils;constproname=hotel;typekezhan=recordcolor,cost:longint;end;varfin,fout:text
7、;i,j,k,l,r,m,n,x,y,s,t:longint;a:array-10.200100ofkezhan;sum:array-10.200100,-10.60oflongint;colorsum,mincost:longint;cafe:array-10.200100oflongint;v:array-10.200100ofboolean;ans:int64;procedurepin;vari,j,k:longint;beginreadln(fin,n,colorsum,mincost);fillchar(a,sizeof(a),0);fori:=1tondoreadln(fin,ai
8、.color,ai.cost);end;functionfind(x:longint):longint;vari,j,k,mid:longint;beginl:=1;r:=s;find:=-1;repeatmid:=(l+r)shr1;ifxr;end;proceduremain;vari,j,k:longint;beginfori:=0tocolorsum-1dosum0,i:=0;fori:=1tondobeginsumi:=sumi-1;sumi,ai.color:=sumi-1,ai.color+1;end;s:=0;fillchar(cafe,sizeof(cafe),0);fill
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NOIP2011 提高 解题 报告 day1

限制150内