noip普及组复赛模拟试题33答案.docx

上传人:b****5 文档编号:4266402 上传时间:2022-11-28 格式:DOCX 页数:10 大小:22.65KB
下载 相关 举报
noip普及组复赛模拟试题33答案.docx_第1页
第1页 / 共10页
noip普及组复赛模拟试题33答案.docx_第2页
第2页 / 共10页
noip普及组复赛模拟试题33答案.docx_第3页
第3页 / 共10页
noip普及组复赛模拟试题33答案.docx_第4页
第4页 / 共10页
noip普及组复赛模拟试题33答案.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

noip普及组复赛模拟试题33答案.docx

《noip普及组复赛模拟试题33答案.docx》由会员分享,可在线阅读,更多相关《noip普及组复赛模拟试题33答案.docx(10页珍藏版)》请在冰豆网上搜索。

noip普及组复赛模拟试题33答案.docx

noip普及组复赛模拟试题33答案

陶陶很喜欢数学,尤其喜欢奇怪的数。

一天,他突然发现,有的整数拥有的因子数是很有个性的,决定找到一个具有n个正因子数的最小的正整数。

例如:

n=4,则m=6,因为6有4个不同正整数因子1,2,3,6;而且是最小的有4个因子的整数。

【输入文件】

仅一个数n(1≤n≤60)

【输出文件】

仅一个数m

【样例输入】

4

【样例输出】

6

varflag:

boolean;x,t,n,i:

longint;

beginreadln(n);

x:

=0;flag:

=false;

whilenotflagdo

beginx:

=x+1;t:

=0;

fori:

=1toxdo

ifxmodi=0thent:

=t+1;

ift=nthenflag:

=true;

end;

writeln(x);

end.

输入12输出60输入30输出720

输入60输出5040输入45输出3600

2.由文件给出n个1~30000的无序数正整数,其中1≤N≤10000,同一个正整数可能会出现多次,出现次数最多的整数称为众数,找出其中的众数及它出现的次数。

输入格式:

输入文件masses.in第一行是正整数的个数N,第二行开始为N个正整数。

输出格式:

输出文件masses.out有若干行,每行两个数,第1个是众数,第2个是众数出现的次数。

样例输入:

30

1821011156133311182121513181715198315171116148716

样例输出:

154

varn,t,i,max:

longint;g:

array[1..30000]ofinteger;

beginassign(input,'masses.in');reset(input);

assign(output,'masses.out');rewrite(output);

readln(n);fillchar(g,sizeof(g),0);

fori:

=1tondobegin

read(t);inc(g[t]);end;

max:

=0;

fori:

=1to30000do

ifg[i]>maxthenmax:

=g[i];

fori:

=1to30000do

ifg[i]=maxthenwriteln(i,'',max);

close(input);close(output);

end.

输入25

214123219953995234399511995100007699591949953002008输出9956

输入1242325372343

输出24

34

输入200

6252617976337173770465724893310407181798889943234304745274164395596769497738434242604038539069936622499244896628581295319294973363094351788410056643454167791148444298169849377058136469745226431458217577263462977956613734847996471176546859894337387322764112846259799092148468916547419518304810024788617218322871181517328541183981905266671031289852913996175355761853641153102859949

输出176

输入300

46609989237183325054714683895893945910746068587577951429628766241133488113077644220181361429572295129935592512463918513721710775424467449762233916112763629616275249846123032505741275524269154431080222840362467258870934964141859100439672589887584751657784392542901435385163740249180944020833579859293124021119859543693831294176976097891970217519938801395953424062673052393952668843412169725131687011176751719786806512287532111998714672461516036374028211759873424149794214668586429940627151297238795893630204348299724195956929859786175424264579561323682385242853024914732405761

输出2411

在n个一连串的方格内填写字母A或B,但相邻两格内不能都填B。

求所有可能的填写方案数。

例如,当n=3,可能的方案有AAA、AAB、ABA、BAA、BAB等5种。

输入N输出方案数。

样例输入15输出1597

var

n,m,s,i,j,count:

longint;

flag:

boolean;

a:

array[1..100]ofinteger;

begin

writeln('inputn:

');

readln(n);

s:

=1;count:

=0;

fori:

=1tondos:

=s*2;

fori:

=0tos-1do

begin

m:

=i;

forj:

=1tondo

begin

a[j]:

=mmod2;

m:

=mdiv2;

end;

flag:

=true;

forj:

=1ton-1do

if(a[j]=1)and(a[j+1]=1)then

beginflag:

=false;break;end;

ifflag=truethencount:

=count+1;

end;

writeln(count);

end.

输入8输出55

输入20输出17711

输入18输出6765

输入12输出377

晚会上大家在玩一款“暴力摩托”的游戏,它拥有非常逼真的画面和音响效果,如疾驰而过的汽车呼啸声,摩托车的引擎声和转弯时轮胎与地面摩擦而产生的声音。

而且它在游戏中加入了对抗成份,比赛中你可以使用拳、脚去干扰对方,使其落后于你,是不是很卑鄙啊?

游戏中千万不能手下留情,因为对手会主动攻击你。

如果遇到开摩托车的警察,虽然也可以对他踢上一脚,但可得小心点呀,万一被他们捉住了,那就GAMEOVER啦!

当然了,车子总是要加油的咯,已知赛道长S公里(S≤10000整数,且为10的倍数),赛车的油耗Q=1,即1公里路耗1个单位的油。

Q不变,赛车的油箱为无穷大,同时在沿途的任何地方都可以加油。

约定,每次加油的数量为整数,且为10的倍数,赛车的速度与赛车加油后的总油量有关。

其关系如下表列出:

加油量

车速(公里/小时)

≤10

100

(10,20]

90

(20,30]

80

(30,40]

75

(40,+∞)

70

同时,汽车每加油一次需要耗费T分钟(T<=100不论加油多少,开始时的加油不计时间)

当S,T给出之后,选择一个最优的加油方案。

使汽车以最少时间跑完全程。

例如:

当S=40,T=6(分钟),加油的方案有许多种,列出一些:

1)起点加油40,用时40/75≈0.53小时

2)起点加油20,中途加20,用时20/90+20/90+6/60(化为小时)≈0.54小时

[输入文件]

一行,为两个整数S、T。

[输出文件]

输出一行,为最少用时(保留二位小数)

[输入样例]

406

[输出样例]

0.53

思路分析

当走到某一距离时,此时的最小用时,与后面的行程方案无关,也就是无后效性,符合动态规划的原则,将S以每10公里为一单位分成sdiv10段,如s=40时,分法如下:

对应路段的最小用时用A数组存放。

很显然A[1]=10/100,走到20公里处时的方案有:

(1)从0公里处加20单位的油,所需最小用时为min=20/90;

(2)先到10公里处,此时的最小用时为A[1],然后再加能到20公里的油,这段路的最小用时为:

(20-10)/100,该方案的一共用时:

A[1]+(20-10)/100。

取两种方案的最小用时存入A[2],同样可以求出A[3]、A[4]的最小用时,从而推出动态方程:

A[i]=min{t(0到i),A[1]+t(1到i),A[2]+t(2到i),……,A[i-1]+t(i-1到i)},其中t(0到i)表示只在0公里处加油后,以后不再加油,t(1到i)表示在10公里处加油后,以后不再加油,……。

参考程序如下:

vars,t,i,j:

longint;

a:

array[1..1000]ofreal;

m,min:

real;

begin

assign(input,'car.in');

assign(output,'car.out');

reset(input);

rewrite(output);

readln(s,t);

fori:

=1tosdiv10do{在0处加油后不再加油,到i的最小用时,用min存放}

begin

caseiof

1:

min:

=10/100;

2:

min:

=20/90;

3:

min:

=30/80;

4:

min:

=40/75;

elsemin:

=i*10/70;

end;

forj:

=1toi-1do{分别求各种方案的最小用时数}

begin

casei-jof

1:

m:

=10/100;

2:

m:

=20/90;

3:

m:

=30/80;

4:

m:

=40/75;

elsem:

=(i-j)*10/70;

end;

m:

=m+t/60;{从j到i的最小用时}

ifm+a[j]

=m+a[j];

end;

a[i]:

=min;

end;

writeln(a[sdiv10]:

0:

2);

close(input);

close(output);

end.

输入12011输出1.71输入300050输出42.86

输入504输出0.66输入10000100输出142.86

小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。

这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。

对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。

假设内存中有M个单元,每单元能存放一个单词和译义。

每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M−1,软件会将新单词存入一个未使用的内存单元;若内存中已存入M个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。

假设一篇英语文章的长度为N个单词。

给定这篇待译文章,翻译软件需要去外存查找多少次词典?

假设在翻译开始前,内存中没有任何单词。

【输入】

输入文件名为translate.in,输入文件共2行。

每行中两个数之间用一个空格隔开。

第一行为两个正整数M和N,代表内存容量和文章的长度。

第二行为N个非负整数,按照文章的顺序,每个数(大小不超过1000)代表一个英文

单词。

文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。

【输出】

输出文件translate.out共1行,包含一个整数,为软件需要查词典的次数。

【输入输出样例1】

translate.intranslate.out

37

1215441

5

【输入输出样例1说明】

整个查字典过程如下:

每行表示一个单词的翻译,冒号前为本次翻译后的内存状况:

空:

内存初始状态为空。

1.1:

查找单词1并调入内存。

2.12:

查找单词2并调入内存。

3.12:

在内存中找到单词1。

4.125:

查找单词5并调入内存。

5.254:

查找单词4并调入内存替代单词1。

6.254:

在内存中找到单词4。

7.541:

查找单词1并调入内存替代单词2。

共计查了5次词典。

 

【输入输出样例2】

translate.intranslate.out

210

88241178117811788264

6

【数据范围】

对于10%的数据有M=1,N≤5。

对于100%的数据有0≤100,0≤1000。

varq:

array[0..10000]oflongint;

m,n,x,i,j:

longint;head,tail,ans:

longint;

f:

boolean;

beginassign(input,'translate.in');reset(input);

assign(output,'translate.out');rewrite(output);

readln(m,n);

head:

=1;

tail:

=0;

ans:

=0;

fori:

=1tondo

beginread(x);

f:

=false;

forj:

=headtotaildo

ifx=q[j]thenbeginf:

=true;breakend;

iffthencontinue;

inc(tail);

q[tail]:

=x;

inc(ans);

ifans>mtheninc(head);

end;

readln;

writeln(ans);

close(input);

close(output);

end.

输入15

714714714714430输出2

输入210

211824992559925599255211264

输出6

输入550

1075673956107979710711113042156111391312107111739295391421800756459949742190398107391193913917399478603921119699710710797786111111295786输出39

输入50100

565623791280818056503272535348081808712372375353484556272272503729845808845287503535180808871272808425344571803476243244842442423715550388588573956237272393729759123696729155565448184500571465413326693808377138155911871582180762759348394912794348716845551682659696424914412457941914404926845输出50

最大连续子序列:

给出一个长度为n的整数序列A,找出i,j使得那一段连续数之和最大。

输入格式:

第一行为n第二行为数列

输出格式:

最大和

样例:

输入样例

6

3-524-16

输出样例

11

var

a,s:

array[0..10000]ofinteger;

i,j,n,max:

integer;

begin

max:

=0;

assign(input,'lxzxl.txt');

reset(input);

readln(n);

fillchar(s,sizeof(s),0);

fori:

=1tondo

begin

read(a[i]);

s[i]:

=s[i-1]+a[i];

end;

close(input);

fori:

=1tondo

forj:

=1tondo

ifs[j]-s[i]>maxthenmax:

=s[j]-s[i];

writeln(max);

end.

输入12

101923-8-11765566-34884357输出374

输入25

55-30981888997766172545-2215877014196051-48911233992输出953

输入19

-581019-1145362716-4202318-9332130-2015输出282

输入80

1001025698-365588997412369-15-25-4477110105786766549328271517313646-721481233120150-1039473109-10820021023051386260-8211-29-111152128134输出2707

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

当前位置:首页 > 工作范文 > 演讲主持

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

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