noip复赛模拟练习25Word文件下载.docx
《noip复赛模拟练习25Word文件下载.docx》由会员分享,可在线阅读,更多相关《noip复赛模拟练习25Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
输入130输出156输入20100输出866
输入112500输出9439输入9001000输出4403
若某不含数字0的三位正整数,其平方数至少有三位同样的数字,则称该三位数为三重数。
例如,由于:
5112=261121(有三位1),所以511为三重数。
输入N,求前N个三重数,并输出这些三重数之和。
如输入5则输出119131149165168HE=732
var
i,j,k,a,b,c,x,n,count,s,GS:
aa:
array[1..5]ofinteger;
begin
writeln;
READ(GS);
s:
count:
=111to316do
begin
a:
=idiv100;
b:
=(idiv10)mod10;
c:
=imod10;
if((a<
>
0)and(b<
0)and(c<
0))then
x:
=i*i;
aa[1]:
=xdiv10000;
aa[2]:
=(xdiv1000)mod10;
aa[3]:
=(xdiv100)mod10;
aa[4]:
=(xdiv10)mod10;
aa[5]:
=xmod10;
=1to3do
n:
fork:
=j+1to5do
ifaa[j]=aa[k]thenn:
=n+1;
ifn>
2thenbeginwriteln(i:
8,x:
8);
=s+i;
=count+1;
break;
ifcount=GSthenbreak;
writeln(s:
end.
输入7输出119131149165168173212HE=1117
输入10输出119131149165168173212216235258HE=1826
输入12输出119131149165168173212216235258264298HE=2388
输入13输出119131149165168173212216235258264298313HE=2701
对容量为C的背包进行装载,从N个物品中选取装入背包的物品,每件物品I(1≤I≤N)的重量为WI,价值为PI,在满足背包中所有物品的总重量不能超过背包的容量的前提下,使所装入的物品价值取得最大值。
输入文件(文件名BAG。
IN)
第一行一个整数,表示C(1≤C≤10000),为背包容量;
第二行一个整数,表示N(1≤N≤100),为物品数量;
第三行N个整数(每个整数值取值范围为[1,100]),相邻两整数以一个空格间隔,为N个物品各自的重量;
第四行N个整数(每个整数值取值范围为[1,100]),相邻两整数以一个空格间隔,为N个物品各自的价值;
输出文件(文件名BAG。
OUT)
只一行,一个整数,表示能取得的最大价值。
样例:
输入10
4
5143
40102530
输出80
varc,tmp:
n:
integer;
w,p:
array[1..100]ofinteger;
f:
array[0..100,0..100]oflongint;
i,j:
begin{assign(input,'
bag.in'
reset(input);
}
readln(c);
readln(n);
=1tondoread(w[i]);
=1tondoread(p[i]);
close(input);
=0tocdof[0,j]:
=1tondo
=0tocdobegin
f[i,j]:
=f[i-1,j];
ifj>
w[i]thenbegin
tmp:
=f[i-1,j-w[i]]+p[i];
iftmp>
f[i,j]thenf[i,j]:
=tmp;
end;
writeln(f[n,c]);
输入20
5
43126
3040352040
输出165
输入120
6
402839175531
79126108输出35
输入78
8
18129201115814
2010143028171022输出121
输入990
40
1011762031659088124153788295681127756709310811466997412187
12391837260801001207181946911810311196
15202512223291019517727141884616261121311323332940394173743473546323242输出210
在n个一连串的方格内填写字母A或B,但相邻两格内不能都填B。
求所有可能的填写方案数。
例如,当n=3,可能的方案有AAA、AAB、ABA、BAA、BAB等5种。
输入N输出方案数。
样例输入15输出1597
n,m,s,i,j,count:
flag:
boolean;
array[1..100]ofinteger;
writeln('
inputn:
'
readln(n);
=1tondos:
=s*2;
=0tos-1do
m:
a[j]:
=mmod2;
=mdiv2;
=true;
=1ton-1do
if(a[j]=1)and(a[j+1]=1)then
beginflag:
=false;
ifflag=truethencount:
writeln(count);
输入8输出55
输入20输出17711
输入18输出6765
输入12输出377
求元素之和最大的子方阵:
在m×
n(m,n≤20)的正整数数字方阵中,找出一个p×
q的子阵(1≤p≤m,1≤q≤n)使其元素之和最大。
例如,下面5×
4的数字阵中,元素之和最大的一个2×
3子阵。
5×
4数字阵元素之和最大的2×
3子阵为
样例:
输入54(5行4列)
38422
11179
52162
10389
27123
23(2行3列)输出
5216
1038
vara:
array[1..20,1..20]ofinteger;
m,n,p,q,i,j,max,p1,q1,s,i1,j1:
fori:
=1to20do
forj:
a[i,j]:
readln(m,n);
=1tomdo
=1tondoread(a[i,j]);
readln
readln(p,q);
max:
=1tom-p+1do
=1ton-q+1do
s:
fori1:
=itop+i-1do
forj1:
=jtoq+j-1do
=s+a[i1,j1];
ifs>
maxthenbegin
=s;
p1:
q1:
=j
=p1top1+p-1do
=q1toq1+q-1do
write(a[i,j]:
3);
writeln
readln
输入64
1292018
8193076
17213344
3456
41451327
10221535
33输出92018
193076
213344
输入66
1192028158
771210143538
7324044518
195580242528
29657234304
3963201114
22输出5580
6572
输入46
327866445523
121816141513
424846343335
910871118
33输出786644
181614
484634
输入107
19308944126677
29202824325670
9101814222667
59403423156874
55548578889190
6444739655182
16547573859267
8121577686997
18523874586691
98424845373631
45输出8578889190
4739655182
7573859267
1577686997
小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。
这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。
对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;
如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。
假设内存中有M个单元,每单元能存放一个单词和译义。
每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过M−1,软件会将新单词存入一个未使用的内存单元;
若内存中已存入M个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。
假设一篇英语文章的长度为N个单词。
给定这篇待译文章,翻译软件需要去外存查找多少次词典?
假设在翻译开始前,内存中没有任何单词。
【输入】
输入文件名为translate.in,输入文件共2行。
每行中两个数之间用一个空格隔开。
第一行为两个正整数M和N,代表内存容量和文章的长度。
第二行为N个非负整数,按照文章的顺序,每个数(大小不超过1000)代表一个英文
单词。
文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。
【输出】
输出文件translate.out共1行,包含一个整数,为软件需要查词典的次数。
【输入输出样例1】
translate.intranslate.out
37
1215441
【输入输出样例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】
210
88241178117811788264
6
【数据范围】
对于10%的数据有M=1,N≤5。
对于100%的数据有0≤100,0≤1000。
varq:
array[0..10000]oflongint;
m,n,x,i,j:
head,tail,ans:
beginassign(input,'
translate.in'
assign(output,'
translate.out'
rewrite(output);
head:
tail:
ans:
beginread(x);
=headtotaildo
ifx=q[j]thenbeginf:
breakend;
iffthencontinue;
inc(tail);
q[tail]:
=x;
inc(ans);
ifans>
mtheninc(head);
readln;
writeln(ans);
close(output);
输入15
714714714714430输出2
输入210
211824992559925599255211264
输出6
输入550
1075673956107979710711113042156111391312107111739295391421800756459949742190398107391193913917399478603921119699710710797786111111295786输出39
输入50100
565623791280818056503272535348081808712372375353484556272272503729845808845287503535180808871272808425344571803476243244842442423715550388588573956237272393729759123696729155565448184500571465413326693808377138155911871582180762759348394912794348716845551682659696424914412457941914404926845输出50
最大连续子序列:
给出一个长度为n的整数序列A,找出i,j使得那一段连续数之和最大。
第一行为n第二行为数列
最大和
输入样例
6
3-524-16
输出样例
11
a,s:
array[0..10000]ofinteger;
i,j,n,max:
assign(input,'
lxzxl.txt'
reset(input);
fillchar(s,sizeof(s),0);
read(a[i]);
s[i]:
=s[i-1]+a[i];
ifs[j]-s[i]>
maxthenmax:
=s[j]-s[i];
writeln(max);
输入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