收藏 分享(赏)

10.7模拟赛 题目+分析(二试)NEW.doc

上传人:11xg27ws 文档编号:4210302 上传时间:2018-12-15 格式:DOC 页数:15 大小:166KB
下载 相关 举报
10.7模拟赛 题目+分析(二试)NEW.doc_第1页
第1页 / 共15页
10.7模拟赛 题目+分析(二试)NEW.doc_第2页
第2页 / 共15页
10.7模拟赛 题目+分析(二试)NEW.doc_第3页
第3页 / 共15页
10.7模拟赛 题目+分析(二试)NEW.doc_第4页
第4页 / 共15页
10.7模拟赛 题目+分析(二试)NEW.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 1 页 信息学奥林匹克联赛(NOIP2011)八校联军复赛模拟二提高组第二试2011 年 10 月 7 日 8:30-11:30(请选手务必仔细阅读本页内容)一、题目概况中文题目名称 文件列表 编译优化 收费站英文题目名称 file compile cost可执行文件名 file compile cost输入文件名 file.in compile.in cost.in输出文件名 file.out compile.out cost.out每个测试点时限 1 秒 1 秒 1 秒测试点数目 10 20 10每个测试点分值 10 5 1

2、0附加样例文件 有 有 有结果比较方式 全文比较过滤行末空 格及文末回车 全文比较过滤行末空 格及文末回车 全文比较过滤行末空 格及文末回车题目类型 传统 传统 传统二、 提交源程序文件名对于 pascal 语言 file.pas compile.pas cost.pas对于 C 语言 file.c compile.c cost.c对于 C+语言 file.cpp compile.cpp cost.cpp三、 编译命令(不包含任何优化开关)对于 pascal 语言 fpc file.pas fpc compile.pas fpc cost.pas对于 C 语言 gcc o file file.

3、c -lm gcc o compile compile.c -lm gcc o cost cost.c -lm对于 C+语言 g+ -o filefile.cpp -lm g+ -o compile compile.cpp -lm g+ -o cost cost.cpp -lm四、 运行内存限制内存上限 256M 256M 256M五、 注意事项1、 文件名(程序名和输入输出文件名)必须使用小写。2、 C/C+中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。3、 全国统一评测时采用的机器配置为:CPU 1.9GHz,内存 1G,上述时限以此配置为准。各省在自测

4、时可根据具体配置调整时限。冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 2 页 1.文件列表(file.pas/c/c+)【问题描述】 BSOI 在线评测机被不明身份的人入侵了!系统中大量的数据遭到恶意破坏,数据文件残缺不全。现在,老师正在尽力抢救数据文件。为了检查数据文件是否完整,老师打印出了所有文件的列表,但数据文件太多,老师眼睛都要看花了。所以,为了方便老师检查,需要你写个程序处理一下文件列表,转换成下面这样统一的格式:(/后面为注释)data /data 文件夹,根目录|-prob /data 下面的文件夹| |-a.in /prob 下面的文件| |-a.out|

5、-qq /data 下面的文件夹| |-new /qq 下面的文件夹| | |-ok.txt /new 下面的文件| |-old /空文件夹|-xxx.rmvb生成的列表格式有如下要求:1.属于同一层的文件或文件夹位于相同的缩进处,相邻两层文件间差距 5 个字符;2.每个文件夹或文件前有 4 个-( 根目录除外) ,文件夹下方属于文件夹的部分有| ;3.属于统一文件夹下的文件或子文件夹按字典序排列;【文件输入】第一行一个整数 n(nusing namespace std;struct triebool end;int c28;void clear()memset(c,0,sizeof(c);e

6、nd=0;tr600001;int n,ct=0;bool xxxxx=0;int get(char x)if(x=atr0.clear();for(i=1;is;set(s);out(0,0,“);/system(“pause“);return 0;2.编译优化(compile.pas/c/cpp)【问题描述】众所周知,衡量一个编译器是否优秀的标准,除了它的编译速度和正确性以外,编译出的代码的质量也很重要。最近,作为 XCC 系列编译器作者的 Dr. X 发明了一种跨时代的优化算法:“NanGe 不等式优化 ”。一个程序可以看成是由若干个连续的函数构成的,NanGe 不等式算法能针对某一个函

7、数进行优化,得到一个优化效果值, 不同的函数的效果值可能是不同的。但这个算法还有一个很大的 Bug:该算法不能同时优化相邻的两个函数,否则就会直接 Compile Error,值得注意的是,一个程序的第一个函数和最后一个函数也算是相邻的。现在给你一个程序从头到尾每个函数的优化效果值,Dr. X 想用 NanGe 不等式对该程序的 M 个函数进行优化,他该怎么选择才能使总的优化效果值最大(前提是不能出现错误)?如果错误不能避免,请输出“Error!”冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 5 页 【输入文件】输入文件的第一行包含两个正整数 n、m 。第二行为 n 个整数

8、 Ai。【输出文件】输出文件仅一个整数,表示最后对该程序进行优化后的最大效果值。如果无解输出“Error!”,不包含引号。【样例输入输出 1】compile.in compile.out7 31 2 3 4 5 6 715【样例输入输出 2】compile.in compile.out7 41 2 3 4 5 6 7Error!【数据规模】对于全部数据:musing namespace std;int n,m;int L200001,R200001;int d200001,pos200001,a200001;void up(int x) int i=x;while(i1swap(posdi,p

9、osdi/2);i/=2;void down(int x) int i=x,j;while(i*2adi*2+1)j=i*2;else j=i*2+1;冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 7 页 if(adiadj)return;swap(di,dj);swap(posdi,posdj);i=j;int main() int i,j;cinnm;if(n/2ai;di=i;posi=i;up(i);Li=i-1;Ri=i+1;L1=n;Rn=1;int ans=0;while(m-) int x=d1;ans+=ax;ax=aLx+aRx-ax;aLx=-1111

10、;down(posLx);aRx=-1111;down(posRx);down(1);Lx=LLx;Rx=RRx;RLx=x;LRx=x;coutminW。则跟 maxW 是最小生成树的边矛盾,因为在添加 maxW 之前 minW 已经添加了。【方法 1】转成 LCA+RMQ于是我们可以先构造出这个图的一棵最小生成树。然后问他就转为求树上任意两点的最大边权LCA+RMQ【算法】求二叉树上任意两点的最短路径上的边权最大值【问题】给出一棵树,每条边有一边权。对于任意给定的两点,求此两点的最短路径上边权的最大值。冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 9 页 对于下图:蓝圈

11、中任意一点与红圈中任意一点的路径上的最大边必定是 8。根据这个现象,可以把上述的树重建成如下图所示。新图的叶子结点为原图的所有结点,内部结点为原图的边权,建边顺序为从小到大。如图所示:新图的红色编号为原图的结点编号,蓝色编号为原图的边。这样,问题就转换为求新图中,任意两个叶子节点的最小公共祖先问题了。【分析时间复杂度】:对于一棵树,n 个结点,m 条边,n=m-1。1、对所有的边进行排序:O(mlgm);2、建图采用并查集维护集合,并查集当前集合的根结点时间复杂度平均为 O(1),建图一共要建立 n+m 个点,所以时间复杂度为 O(n+m);3、查询任意两个结点的最近公共祖先,采用 RMQ 处

12、理,预处理的时间复杂度为O(n+m),回答时间复杂度为 O(1);所以,总的时间复杂度 O(nlogn)。#include#include#includeconst int maxn=11000,maxm=110000,logn=30;struct edgeint u,v,c; emaxm;int E=1,n,q,m,i,x,y,famaxn,lamaxnlogn,Maxmaxnlogn;int pointmaxm*2,nextmaxm*2,lenmaxm*2,firmaxn,dmaxn;bool fmaxn;int CMP(const void *a,const void *b)return

13、 (edge*)a)-c-(edge*)b)-c;int get(int x)if(fax=x)return x;return fax=get(fax);void add(int u,int v,int c)pointE=v;nextE=firu;lenE=c;firu=E+;int maxi(int a,int b)return ab?a:b;void dfs(int x,int fa,int w,int deep)dx=deep;fx=1;lax0=fa;Maxx0=lenw;for(int i=1;lalaxi-1i-1;i+)laxi=lalaxi-1i-1;冲刺 NOIP2011 八

14、校联军复赛模拟二(巴蜀中学) 提高组第 10 页 Maxxi=maxi(Maxxi-1,Maxlaxi-1i-1);for(int k=firx;k;k=nextk)if(!fpointk)dfs(pointk,x,k,deep+1);int ask(int x,int y)int ans=0,i;if(dxdy)int tmp=x;x=y;y=tmp;for(i=logn-1;i=0;i-)if(layiy=layi;if(dlayi=dx)break;if(x=y)return ans;for(i=logn-1;i=0;i-)if(layiy=layi;ans=maxi(ans,Maxxi

15、);x=laxi;ans=maxi(ans,maxi(Maxy0,Maxx0);return ans;int main()freopen(“cost.in“,“r“,stdin);freopen(“cost.out“,“w“,stdout);scanf(“%d%d“,for(i=1;i#include#include#includeusing namespace std;const int MaxN=20005,MaxM=100005;struct LinkTypeint a,b,c;冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 11 页 LinkType wMaxM,eM

16、axM,tMaxN,qMaxN,rMaxN;int heMaxM,hqMaxN,hrMaxN;int fatherMaxN,mvMaxN,markMaxN;int ansMaxN;int N,M,Q,e0=0,q0=0,r0=0;void Addq(int x,int y,int z) q0+; qq0.a=y; qq0.b=hqx; hqx=q0; qq0.c=z;void Adde(int x,int y,int z) e0+; ee0.a=y; ee0.b=hex; hex=e0; ee0.c=z;void Addr(int x,int y) r0+; rr0.a=y; rr0.b=hr

17、x; hrx=r0;void Read() int i;scanf(“%d%d“,for(i=1;i#include #include using namespace std;const int maxn = 100009+10009;struct arrint x,y,z;emaxn;int depmaxn,premaxn22,famaxn,two22,n,m,q,vmaxn;struct cmpbool operator ()(const arr p,const arr q) return p.z =1; i-)depi = depprei0+1;for (int i=0; i depy)

18、 for (int i=20; i=0; i-)if (twoi depx) for (int i=20; i=0; i-)if (twoi=depy-depx) y = preyi; break;冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 14 页 elseif (x != y) for (int i=1; i=20; i+)if (prexi=preyi) x = prexi-1; y = preyi-1; break; return x;void conect(int x,int y) prey0 = x; int find(int x)if (fax=x) ret

19、urn x;fax = find(fax);return fax;int main()freopen(“cost.in“,“r“,stdin);freopen(“cost.out“,“w“,stdout);two0 = 1;for (int i=1; i=20; i+) twoi = twoi-1*2;scanf(“%d%dn“,for (int i=1; i=m; i+)scanf(“%d%d%dn“,sort(e+1,e+m+1,cmp();for (int i=1; i=n+m; i+) fai = i;for (int i=1; i=m; i+)if (find(ei.x)!=find(ei.y)v+n = ei.z;int x = find(ei.x);int y = find(ei.y);fax = n; fay = n;conect(n,x); conect(n,y);冲刺 NOIP2011 八校联军复赛模拟二(巴蜀中学) 提高组第 15 页 prep();scanf(“%dn“,for (int i=1; i=q; i+)int x,y;scanf(“%d%dn“,int tmp = iask(x,y);printf(“%dn“,vtmp);return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报