16届国际信息学奥赛试题Word文档格式.docx

上传人:b****5 文档编号:20473649 上传时间:2023-01-23 格式:DOCX 页数:27 大小:1.96MB
下载 相关 举报
16届国际信息学奥赛试题Word文档格式.docx_第1页
第1页 / 共27页
16届国际信息学奥赛试题Word文档格式.docx_第2页
第2页 / 共27页
16届国际信息学奥赛试题Word文档格式.docx_第3页
第3页 / 共27页
16届国际信息学奥赛试题Word文档格式.docx_第4页
第4页 / 共27页
16届国际信息学奥赛试题Word文档格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

16届国际信息学奥赛试题Word文档格式.docx

《16届国际信息学奥赛试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《16届国际信息学奥赛试题Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。

16届国际信息学奥赛试题Word文档格式.docx

 

CONSTRAINS

Inallinputs,1≤N≤20000,0≤X,Y≤64000and,1<

T≤N.

Additionally,in50%oftheinputs,1<

N<

5000

参考译文:

阿耳特弥斯

(Day1文件名artemis.*内存限制:

16MB,时间限制1s)

问题描述:

宙斯赠予女神阿耳特弥斯一片矩形的土地让其植树。

设矩形的左边为y轴正极的一段,矩形的底边x轴正极的一段,矩形的左下角为(0,0)。

宙斯告诉阿耳特弥斯只能在该矩形的整数坐标点上植树。

阿耳特弥斯喜欢让森林看起来自然一些,因此她采用了这样一种方式植树:

连结两棵树的一条直线从不与x轴或者y轴平行。

宙斯有时要阿耳特弥斯为他伐树,而且这些树必须依照以下方式来来砍伐:

1.宙斯至少想砍掉的树木的数量为T。

2.为了将来能够成功地开展足球运动得开辟一块矩形的球场,阿耳特弥斯必须砍掉这个矩形球场内的所有树木,保留场外的树木。

3.这个矩形的球场的边必须与x轴和y轴平行。

4.该区域的两个对角必须为原有的树木位置,因此位于对角位置的这些树木也必须被砍掉。

阿耳特弥斯爱树心切,她想在不违反上述规定的前提下尽可能多地保留一些树木。

基于上述信息,设必须砍掉的树木的最小值为T,请你编写一个程序,为阿耳特弥斯选定一块伐树的区域。

输入:

输入文件名为artemis.in.第一行包含一个整数N即树木的数量。

第二行包含一个整数T即被伐树木的最小值。

接下来的N行表述的是N棵树的位置,每行包含两个整数X和Y,表示x坐标点和y坐标点。

输出:

输出文件名为artemis.out。

该文件有一行,包含两个整数I和J,两数间空一格:

阿耳特弥斯要用第I棵树(该树为输入文件的第I+2行)以及第J棵树(该树为输入文件的第J+2行)作为伐树区域。

这两个数字的顺序并不相关。

可以有几种方法来选择这些树木,你必须找到并输出其中的一种方案。

在所有的测试方案中至少存在着一种解决方法。

输入输出样例:

artemis.in:

artemis.out:

数据规模:

在所有输入项中,1≤N≤20000,0≤X,Y≤64000and,1<

T≤N.此外,50%的输入项中,1<

N≤5000

试题分析:

如果用数学语言描述的话,可以将试题简述成:

给出平面上的若干个整点,这些点的x轴坐标各不相同,y轴坐标也各不相同。

现在要找出一个边平行于坐标轴的矩形,这个矩形的一对对角点必须是给出的点,且内含的点数(包括对角的两个点)在至少有T个点的前提下尽可能地少。

参考程序1:

#defineNAME“artemis”

charboxdir[1000];

charrundir[1000];

charinfile[1000];

charcorrectfile[1000];

charoutfile[1000];

charscorefile[1000];

charstatusfile[1000];

#include<

stdio.h>

stdlib.h>

string.h>

assert.h>

limits.h>

stdarg.h>

#defineMAXN20000

#defineMAXXY1000000

typedefstruct

20090115

{

intx,y;

intid;

intbl;

}point;

intN,T;

pointP[MAXN];

intbestp,bestq;

intbest;

voidreadin()

FILE*f;

Inti,r;

f=fopen(infile,“r”);

assert(f);

r=fscanf(f,“%d%d”,&

N,&

T);

assert(r==2);

assert(2<

=N&

&

=MAXN);

assert(0<

=T&

T<

=N);

for(i=0;

i<

N;

i++){

r=fscanf(f,“%d%d”,&

P[i].x,&

P[i].y);

assert(P[i].x)=0&

P[i].x(=MAXXY);

assert(P[i].y>

=0&

P[i].y<

=MAXXY);

P[i].id=i+1;

}

fclose(f);

intcompare(constvoid*a,constvoid*b)

return((constpoint*)a)->

x-((constpoint*)b)->

x;

voidtest(intp,intq,intv){

if(v>

=T&

v<

best){

best=v;

if(p[bestp].id>

P[bestq].id){

bestp=p;

bedstq=q;

}else{

bestp=q;

bestq=p;

}

voidsolve()

inti,j;

intvsort[MAXN];

intleft[MAXN];

int1;

qesort(P,N,sizeof(point),compare);

best=INT_MAX;

for(i=0:

i<

N:

i++){

l=0;

for(j=0;

j<

i;

j++){

if(P[j].y<

P[i].y)1++;

left[j]=1;

P[i].b1=1+1;

j<

j++){

if(P[i].y<

P[vsort[j]].y)break;

test(i,vsort[j],

P[i].b1+P[vsort[j]].b1

-left[vsort[j]]-j);

1=j;

for(j=i;

j>

1;

j--){

vsort[j]=vsort[j-1];

test(i,vsort[j],

j+1+left[vsort[j]]+(+1)/*stoumposadded:

+1*/

-P[i].b1-P[vsort[j]]j.b1+1);

vsort[1]=i;

if(best==T){

/*can’tdobetterthanthat*/

break;

assert(best!

=INT_MAX);

inlineintin_range(inta,intt,intb)

return(a<

=t&

t(=b)-︳︳(b<

t<

=a);

voidwrong(char*fmt,…){

va_listap;

FILE*status=fopen(statusfile,“w”);

FILE*score=fopen(scorefile,“w”);

assert(status);

assert(score);

va_start(ap,fmt);

vfprintf(status,fmt,ap);

fclose(status);

fprintf(score,“0﹨n”);

exit

(1);

voidright(char*fmt,…){

FILE*status=fopen(stantusfile,“w”);

fprintf(score,“5﹨n”);

exit(0);

voidcheck(){

intp=0;

intq=0;

inti=0;

intcount=0;

readin();

/*rereadtogetrightorder*/

f=fopen(outfile,“r”);

/*getstudent’ssolution*/

fscanf(f,“%d%d﹨n”,&

p,&

q);

fclose(f);

if(p<

1-︳︳p>

20000)

wrong(“firstvalueof%disoutofrange”,p);

if(q<

1︳︳-q>

wrong(“secondvalueof%disoutofrange”,q);

p—;

q—;

/*checksolution*/

if(in_range(P[p].x,P[i].x,P[q].x)){

if(in_range(P[p].y,P[i].y,p[q].y)){

count++;

if(count>

best)

wrong(“Suboptimal:

soln=%doptimum=%d﹨n”,count,best);

if(count<

T)

wrong(“Solntoosmall:

soln=%dtarget=%d﹨n”,count,T);

right(“OK﹨n”);

intmain(intargc,char**argv){

assert(argc==4);

intcasenum=atoi(argv[1]);

/*casenumber*/

strcpv(boxdir,argv[2]);

/*wherestudent’sprogramran*/

strcpy(rundir,argv[3]);

/*whereauxinfois*/

sprintf(infile,“%s/%s.in”,boxdir,NAME);

/*inputfilename*/

sprintf(correctfile,“%s/%s.correct”,runair,NAME);

/*properoutputfilename*/

sprintf(outfile,“%s/%s.out”,boxdir,NAME);

/*student’soutputfilename*/

springf(scorefile,“%s/%s.score”,rundir,NAME);

/*pointsgohere*/

springf(scorefile,“%s/%s.status”,rundir,NAME),

/*messagegoeshere*/

reading();

solve();

check();

第二题赫尔默斯

Day1.Sourcefilehermes.*

16MB.Maximumrunningtime:

1s.

InamoderncityforGreekgods,thestreetsaregeometricallyarrangedasagridwithintegercoordinateswithstreetsparalleltothexandyaxes.ForeachintegervalueZ,thereisahorizontalstreetaty=Zandaverticalstreetatx=Z.Thisway,integercoordinatepairsrepresentthestreetjunctions.Duringthehotdays,thegodsrestincafeteriasatstreetjunctions.MessengerHermesistosendphotonmessagestogodsrestinginthecafeteriasbyonlymovingalongthecitystreets.Eachmessageisforasinglegod,anditdoesnotmatteriftheothergodsseethemessage.

Themessagesaretobesentinagivenorder,andHermesisprovidedthecoordinatesofthecafeteriasinthatorder.Hermesstartsfrom(0,0).Tosendamessagetoacafeteriaat(Xi,Yi),Hermesonlyneedstovisitsomepointonthesamehorizontalstreet(withy-coordinateYi)oronthesameverticalstreet(withx-coordinateXi).Havingsentallofthemessages,Hermesstops.

Youaretowriteaprogramthat,givenasequenceofcafeterias,findstheminimumtotaldistanceHermesneedstotraveltosendthemessages.

INPUT

Theinputfilenameishermes.in.ThefirstlinecontainsoneintegerN:

thenumberofmessagestobesent.ThefollowingNlinescontainthecoordinatesoftheNstreetjunctionswherethemessagesaretobesent.TheseNlinesareintheorderinwhichthemessagesaretobesent.EachoftheseNlinescontainstwointegers:

firstthex-coordinateandthenthey-coordinateofthestreetjunction.

OUTPUT

Theoutputfilenameishermes.out.Thefileistocontainasinglelinecontainingoneinteger:

theminimumtotaldistanceHermesneedstotraveltosendthemessages.

EXAMPLEINPUTSANSOUTPUTS

hermes.inhermes.out

5

83

7-7

81

-21

6-5

Inallinputs,1≤N≤20000,-1000≤Xi,Yi≤1000

N≤80

赫尔默斯

(Day1文件名hermes.*内存限制:

16MB,时间限制1s)

在一个希腊诸神居住的现代城市,街道是以几何图形排列的,就像是整数轴的坐标网格,每条道路都与x轴或者Y轴平行。

就每一个整数值Z而言,在y=Z处有一条横向街道,在x=Z处有一条纵向街道。

整数坐标点代表街道汇合处。

天热的时候,希腊神要在位于街道汇合处的餐馆里休息。

电报信使赫尔默斯要将电报送到在餐馆休息的诸神手中,他需要在这个城市的各条道路之间穿梭。

每封电报都是专门给某一位神的,但即使其他神看到这封电报也无大碍。

电报必须要按指定顺序来送。

那些餐馆的坐标已经按指定的顺序告诉给赫尔默斯了。

赫尔默斯从(0,0)出发。

为把电报送到位于(Xi,Yi)的餐馆,赫尔默斯只需到达y=Yi的某条横向道路上的一点,或到达x=Xi的某条纵向道路上的一点即可。

送完所有电报后,赫尔默斯就停下来了。

要求你根据指定的餐馆的顺序编写一个程序,算出赫尔默斯送完所有的电报最少需要的行程是多少。

输入文件名为hemes.in。

第一行包含一个整数N,表示需要发送的电报的数量。

接下来的N行包含电报送至的N个街道交汇处的坐标。

这N行按照电报发送的先后顺序来排序。

这N行中的每一行包含两个整数:

第一个为街道交汇处的X坐标,第二个为街道交汇处的Y坐标。

输出文件名为hermes.out。

该文件只有一行,该行只有一个整数即Hermes送完电报最少需要的行程。

输入输出样例:

hermes.in

hermes.out

在所有输入项中,1≤N≤20000,-1000≤Xi,Yi≤1000此外,50%的输入项中1<

N≤80。

我们可以用数学语言将该题简述成:

在一个2000*2

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

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1