noip提高组 复赛试题及参考程序pascal.docx

上传人:b****2 文档编号:17190599 上传时间:2023-04-24 格式:DOCX 页数:18 大小:28.41KB
下载 相关 举报
noip提高组 复赛试题及参考程序pascal.docx_第1页
第1页 / 共18页
noip提高组 复赛试题及参考程序pascal.docx_第2页
第2页 / 共18页
noip提高组 复赛试题及参考程序pascal.docx_第3页
第3页 / 共18页
noip提高组 复赛试题及参考程序pascal.docx_第4页
第4页 / 共18页
noip提高组 复赛试题及参考程序pascal.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

noip提高组 复赛试题及参考程序pascal.docx

《noip提高组 复赛试题及参考程序pascal.docx》由会员分享,可在线阅读,更多相关《noip提高组 复赛试题及参考程序pascal.docx(18页珍藏版)》请在冰豆网上搜索。

noip提高组 复赛试题及参考程序pascal.docx

noip提高组复赛试题及参考程序pascal

第七届(2001)分区联赛复赛解题报告(提高组)

第一题:

一元三次方程求解(p1.pasp1.inp1.out)

问题描述

有形如:

ax3+bx2+cx+d=0 这样的一个一元三次方程。

给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。

要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。

提示:

记方程f(x)=0,若存在2个数x1和x2,且x1

样例

输入:

1  -5  -4  20

输出:

-2.00  2.00  5.00

第二题:

数的划分(p2.pas/c/cppp2.inp2.out)

问题描述

将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。

例如:

n=7,k=3,下面三种分法被认为是相同的。

1,1,5;1,5,1;5,1,1;问有多少种不同的分法。

输入:

n,k(6

输出:

一个整数,即不同的分法。

样例

输入:

73

输出:

4{四种分法为:

1,1,5;1,2,4;1,3,3;2,2,3;}

 

第三题:

统计单词个数(p3.pas/c/cppp3.inp3.out)

问题描述

给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。

要求将此字母串分成k份(1

当选用一个单词之后,其第一个字母不能再用。

例如字符串this中可包含this和is,选用this之后就不能包含th)。

单词在给出的一个不超过6个单词的字典中。

要求输出最大的个数。

输入格式:

输入数据放在文本文件p3.in中,其格式如下:

第一行为一个正整数(0

接下来的p行,每行均有20个字符。

再接下来有一个正整数s,表示字典中单词个数。

(1<=s<=6)接下来的s行,每行均有一个单词。

输出格式:

结果输出至屏幕,每行一个整数,分别对应每组测试数据的相应结果。

样例

输入:

1

13

thisisabookyouareaoh

4

is

a

ok

sab

输出:

//说明:

(不必输出)

7//this/isabookyoua/reaoh

第四题:

CAR的旅行路线(p4.pas/c/cppp4.inp4.out)

问题描述

又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。

她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。

那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?

她发现这并不是一个简单的问题,于是她来向你请教。

任务:

找出一条从城市A到B的旅游路线,出发和到达城市中的机场可以任意选取,要求总的花费最少。

输入文件:

输入文件名p4.in

输出:

p4.out(输出最小费用,小数点后保留1位。

输入格式:

第一行为一个正整数n(0<=n<=10),表示有n组测试数据。

每组的第一行有四个正整数s,t,A,B。

S(0

接下来有S行,其中第I行均有7个正整数xi1,yi1,xi2,yi2,xi3,yi3,Ti,这当中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分别是第I个城市中任意三个机场的坐标,TI为第I个城市高速铁路单位里程的价格。

输出格式:

共有n行,每行一个数据对应测试数据。

样例

输入

1

11013

11133130

2574521

86881163

输出:

47.55

参考程序:

第一题:

var

y,n,a,b,c,d:

real;

i:

longint;

begin

assign(input,'p1.in');reset(input);

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

read(a,b,c,d);

fori:

=-10000to10000do

begin

n:

=i/100;

y:

=n*n*n*a+n*n*b+n*c+d;

ifabs(y)<1e-5thenwrite(n:

0:

2,'');

end;

close(input);close(output);

end.

 

第二题:

var

n,k:

longint;

functionf(n,k,s:

longint):

longint;

var

sum,i:

longint;

begin

sum:

=0;

ifk=1thenexit

(1);

fori:

=stondivkdo

sum:

=sum+f(n-i,k-1,i);

exit(sum);

end;

begin

assign(input,'p2.in');reset(input);

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

readln(n,k);

write(f(n,k,1));

close(input);close(output);

end.

 

第三题:

Var

p,k,s,n:

integer;

ss:

string[200];

word:

array[1..6]ofstring[200];

g:

array[1..200,1..200]ofbyte;

f:

array[1..200,1..40]ofinteger;

w:

array[1..200]ofbyte;

functionmax(a,b:

integer):

integer;

begin

ifa>bthenexit(a);

exit(b);

end;

procedureinIt;

var

i,j:

integer;

s1:

string;

begin

ss:

='';

readln(p,k);

fori:

=1topdo

begin

readln(s1);

ss:

=ss+s1;

end;

n:

=20*p;

readln(s);

fori:

=1tosdoreadln(word[i]);

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

fillchar(f,sizeof(f),0);

fori:

=1tondo

begin

w[i]:

=200;

forj:

=1tosdo

if(copy(ss,i,length(word[J]))=word[j])and(length(word[j])

=length(word[j]);

end;

fori:

=1tondo

forj:

=itondo

forp:

=itojdo

if(w[p]+p-1<=j)theng[i,j]:

=g[i,j]+1;

end;

proceduresolve;

var

i,j:

integer;

begin

fori:

=1tondo

f[i,1]:

=g[1,i];

forp:

=2tokdo

fori:

=ptondo

forj:

=p-1toi-1do

f[i,p]:

=max(f[i,p],f[j,p-1]+g[j+1,i]);

writeln(f[n,k]);

end;

begin

assign(input,'p3.in');reset(input);

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

init;

solve;

close(input);close(output);

end.

 

第四题:

方法一:

Folyd:

const

inf=1e+38;

var

s,a,b,m,n,t:

longint;

tr:

array[1..100]oflongint;

x,y:

array[1..100,1..4]oflongint;

w:

array[0..400,0..400]ofreal;

functiondis(x1,y1,x2,y2:

longint):

real;

begin

dis:

=sqrt(sqr(x2-x1)+sqr(y2-y1));

end;

proceduresolve;

var

i,j,k,i1,j1:

longint;

l:

real;

begin

readln(s,t,a,b);

ifa=bthen

begin

writeln('0.00');

writeln;

exit;

end;

form:

=1tosdo

begin

readln(x[m,1],y[m,1],x[m,2],y[m,2],x[m,3],y[m,3],tr[m]);

fori:

=1to2do

forj:

=1to3do

ifi<>jthen

if(x[m,j]-x[m,i])*(x[m,6-i-j]-x[m,j])+(y[m,j]-y[m,i])*(y[m,6-i-j]-y[m,j])=0then

begin

x[m,4]:

=x[m,i]-x[m,j]+x[m,6-i-j];

y[m,4]:

=y[m,i]-y[m,j]+y[m,6-i-j];

end;

end;

fori:

=1tosdo

forj:

=1to4do

fork:

=1to4do

w[4*i-4+j,4*i-4+k]:

=dis(x[i,j],y[i,j],x[i,k],y[i,k])*tr[i];

fori:

=1tosdo

fori1:

=1to4do

forj:

=1tosdo

ifi<>jthen

forj1:

=1to4do

w[4*i-4+i1,4*j-4+j1]:

=dis(x[i,i1],y[i,i1],x[j,j1],y[j,j1])*t;

fork:

=1to4*sdo

fori:

=1to4*sdo

ifi<>kthen

forj:

=1to4*sdo

if(w[i,j]>w[i,k]+w[k,j])and(j<>k)and(j<>i)thenw[i,j]:

=w[i,k]+w[k,j];

l:

=1e38;

fori:

=1to4do

forj:

=1to4do

ifw[a*4-4+i,b*4-4+j]

=w[a*4-4+i,b*4-4+j];

writeln(l:

0:

2);

writeln;

end;

begin

assign(input,'car.in');reset(input);

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

readln(n);

fort:

=1tondosolve;

close(input);close(output);

end.

 

方法二:

单元最短路径:

const

inf=1e+38;

var

s,a,b,m,n,t:

longint;

tr:

array[1..100]oflongint;

x,y:

array[1..100,1..4]oflongint;

z:

array[0..100,1..4,1..4]ofreal;

f:

array[0..100,1..4,0..100,1..4]ofreal;

w:

array[0..100,1..4]ofreal;

functiondis(x1,y1,x2,y2:

longint):

real;

begin

dis:

=sqrt(sqr(x2-x1)+sqr(y2-y1));

end;

functiondij(c:

longint):

real;

var

v:

array[1..100,1..4]ofboolean;

i,j,k,g,mc,mp:

longint;

min:

real;

begin

fillchar(v,sizeof(v),false);

fori:

=1tosdo

forj:

=1to4do

w[i,j]:

=f[a,c,i,j];

w[a,c]:

=0;

fori:

=1to4dov[a,i]:

=true;

mc:

=a;mp:

=c;

forj:

=1to4*s-8do

begin

min:

=inf;

fori:

=1tosdo

fork:

=1to4do

if(notv[i,k])and(w[i,k]

begin

mc:

=i;

mp:

=k;

min:

=w[i,k];

end;

v[mc,mp]:

=true;

ifmc=bthencontinue;

fori:

=1tosdo

fork:

=1to4do

forg:

=1to4do

if(w[i,k]>w[mc,mp]+f[mc,g,i,k]+z[mc,mp,g])thenw[i,k]:

=w[mc,mp]+f[mc,g,i,k]+z[mc,mp,g];

end;

min:

=w[b,1];

fori:

=2to4do

ifw[b,i]

=w[b,i];

exit(min);

end;

proceduresolve;

var

i,j,i1,j1:

longint;

l,k:

real;

begin

readln(s,t,a,b);

form:

=1tosdo

begin

readln(x[m,1],y[m,1],x[m,2],y[m,2],x[m,3],y[m,3],tr[m]);

fori:

=1to2do

forj:

=1to3do

ifi<>jthen

if(x[m,j]-x[m,i])*(x[m,6-i-j]-x[m,j])+(y[m,j]-y[m,i])*(y[m,6-i-j]-y[m,j])=0then

begin

x[m,4]:

=x[m,i]-x[m,j]+x[m,6-i-j];

y[m,4]:

=y[m,i]-y[m,j]+y[m,6-i-j];

end;

fori:

=1to3do

forj:

=1to4do

ifi<>jthen

begin

z[m,i,j]:

=dis(x[m,i],y[m,i],x[m,j],y[m,j])*tr[m];

z[m,j,i]:

=z[m,i,j];

end

else

begin

z[m,i,j]:

=inf;

z[m,j,i]:

=inf;

end;

end;

fori:

=1tosdo

fori1:

=1to4do

forj:

=1tosdo

forj1:

=1to4do

ifi<>jthen

begin

f[i,i1,j,j1]:

=dis(x[i,i1],y[i,i1],x[j,j1],y[j,j1])*t;

f[j,j1,i,i1]:

=f[i,i1,j,j1];

end

else

begin

f[i,i1,j,j1]:

=inf;

f[j,j1,i,i1]:

=inf;

end;

ifa=bthen

begin

writeln('0.00');

writeln;

end

else

begin

l:

=1e38;

fori:

=1to4do

begin

k:

=dij(i);

ifk

=k;

end;

writeln(l:

0:

2);

writeln;

end;

end;

begin

assign(input,'car.in');reset(input);

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

readln(n);

fort:

=1tondosolve;

close(input);close(output);

end.

 

方法三:

单元最短路径(不是从1出发):

const

inf=1e38;

var

tt,n,s,t,a,b,m:

integer;

tr:

array[1..100]oflongint;

x,y:

array[1..100,1..4]oflongint;

w,z:

array[0..401,0..401]ofreal;

f:

array[0..401]ofreal;

max:

extended;

functiondist(x1,y1,x2,y2:

longint):

real;

begin

dist:

=sqrt(sqr(x2-x1)+sqr(y2-y1));

end;

functiondiska(a:

longint):

real;

var

v:

array[0..401]ofboolean;

k,mc,mp,i,j,p:

longint;

max:

real;

begin

fillchar(v,sizeof(v),false);

v[a]:

=true;

fori:

=1tosdo

forj:

=1to4do

f[4*i-4+j]:

=w[a,4*i-4+j];

forj:

=2to4*sdo

begin

max:

=inf;p:

=a;

fori:

=1tosdo

fork:

=1to4do

if(f[4*i-4+k]

begin

max:

=f[4*i-4+k];

mc:

=i;

mp:

=k;

end;

p:

=4*mc-4+mp;

v[p]:

=true;

fori:

=1tosdo

fork:

=1to4do

iff[4*i-4+k]>f[p]+w[p,4*i-4+k]thenf[4*i-4+k]:

=f[p]+w[p,4*i-4+k];

end;

max:

=inf;

fori:

=1to4do

ifmax>f[b*4-4+i]thenmax:

=f[b*4-4+i];

exit(max);

end;

proceduresolve;

var

i,j,k,l:

longint;

ans,min:

real;

begin

readln(s,t,a,b);

ifa=bthen

begin

writeln('0.00');

writeln;

exit;

end;

form:

=1tosdo

begin

readln(x[m,1],y[m,1],x[m,2],y[m,2],x[m,3],y[m,3],tr[m]);

fori:

=1to2do

forj:

=1to3do

ifi<>jthen

if(x[m,j]-x[m,i])*(x[m,6-i-j]-x[m,j])+(y[m,j]-y[m,i])*(y[m,6-i-j]-y[m,j])=0then

begin

x[m,4]:

=x[m,i]-x[m,j]+x[m,6-i-j];

y[m,4]:

=y[m,i]-y[m,j]+y[m,6-i-j];

end;

end;

fori:

=1tosdo

forj:

=1to4do

fork:

=1to4do

w[4*i-4+j,4*i-4+k]:

=dist(x[i,j],y[i,j],x[i,k],y[i,k])*tr[i];

fori:

=1tosdo

forj:

=1to4do

fork:

=1tosdo

ifi<>kthen

forl:

=1to4do

w[4*i-4+j,4*k-4+l]:

=dist(x[i,j],y[i,j],x[k,l],y[k,l])*t;

ans:

=inf;

fork:

=1to4do

begin

min:

=diska(4*a-4+k);

ifmin

=min;

end;

writeln(ans:

0:

2);

writeln;

end;

begin

assign(input,'car.in');reset(input);

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

readln(n);

fortt:

=1tondosolve;

close(input);close(output);

end.

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

当前位置:首页 > 党团工作 > 其它

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

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