回 帖 发 新 帖 刷新版面

主题:帮帮我呀,大哥!来了就给分!

2009年的市赛,谁会?用PASIC,我重赏他

注意事项

1. 考试时间为150分钟。

2. 务必看清题目,严格按照所要求的格式输入、输出。

3. 在调试程序时请先使用题目中的示例数据,然后再自行设计多组测试数据进行调试。

4. 每题一般有10个测试点,测试有严格的时间限制,请尽可能优化算法。

5. 命名规则:

(1)每题都规定了该题的英文名称。

(2)程序文件和数据文件的主文件名都是该题的英文名字。

(3)程序文件扩展名采用语言环境的默认扩展名。

(4)数据文件都是文本文件,输入和输出文件的扩展名分别是.in和.out。

6. 程序应从输入文件读取数据,并严格地按照规定的输出格式将结果输出到输出文件中。输入数据文件和输出数据文件都与程序在同一个目录中,由于程序所在目录是不确定的,因此不允许在文件名中含有盘符信息和任何形式的路径信息。

7. 选手应在D盘的根目录下建立以准考证号命名的文件夹,并将所完成各题的源程序文件和可执行文件拷贝到该文件夹中。


 1.乘车费用(taxi.bas/ taxi.pas/ taxi.c)

【问题描述】

元旦快到了,小W的班级准备举办元旦庆祝活动,小W和几个同学一起帮助班主任老师进行准备。小W带着几个同学乘坐出租车去买东西。在出租车上,他们向司机师傅了解到出租车计价方案为:2.5公里以内起步价是6元,超过2.5公里之后按1.2元/公里计价,超过10公里之后在1.2元/公里的基础上加价50%,另外,停车等候时间则按时间计费后加入总价:1元/5分(注:不满5分钟不计费)。好奇的小W想自己先估算一下大概要多少费用。已知:小W等人乘坐出租车路程为N公里,中间停车等候时间总共M分钟,请计算小W应付的出租车费用是多少元?

【输入文件】

输入文件共有一行,包含两个整数N,M,分别表示出租车行驶的里程和中间停车的时间,中间以空格分开,0≤N≤200,0≤M≤60。

【输出文件】

输出仅包含一个整数,表示小W应付的乘车费用,四舍五入到整数元。

【输入样例】

8 7

【输出样例】

14

 2.围墙重建(wall.bas/ wall.pas/ wall.c)

【问题描述】

为了给同学们营造一个良好的学习环境和方便学校的管理,市政府准备对小W就读的学校进行重新规划,占地面积将再次扩大。学校通过领导会议决定,重建学校的围墙。由于学校太大,重建围墙也不是一件小项目,学校决定请专门的建筑公司来建筑。

许多建筑公司从网上得知这个消息后,纷纷来到学校,找到学校领导,对自己公司进行介绍,并希望能接下这个项目。学校领导对很多家公司印象都还不错,难以取舍,为了公平,学校决定通过竞标决定把这个项目交给哪家公司负责。这次竞标是由学校自主决定的,不但要注重建筑实力,而且还要看建筑公司是否有足够的智慧。

学校通过两轮选拔。第一轮,选出建筑实力较强的公司。进入第二轮后,由学校专门负责这个项目的领导进行智力考核。

领导说:为了美观,我们准备建设一面2米高的围墙,围墙建好后,墙外要贴上有图画的瓷砖,当然这就需要瓷砖越大越美观了。目前市面用的最大瓷砖是多大?

公司:宽1米,长2米的

领导:哦,我们就用这种吧,我们学现需建筑N米长的围墙,如果用这种瓷砖来贴,总共有多少种贴法呢?

公司:…………….(正在计算中……………)

【输入文件】

输入文件为一个数N(1<N<10000),表示围墙的长度。

【输出文件】

输出一个数,表示如果用宽1米、长2米,贴在高2米,长N米的围墙上,最多有多少种贴法?(输出数据后需换行)

【样例输入1】

4

【样例输出1】

5

【样例输入2】

6

【样例输出2】

13

【数据规模】

对于20%的数据,2<N<90;

对于60%的数据,2<N ≤1200;

对于100%的数据,2< N<10000。


 3.走迷宫(maze.bas/ maze.pas/ maze.c)

【问题描述】

小W来到一个迷宫游玩,他发现迷宫非常特别。这个迷宫共有N层楼,配备了一个特别的电梯。迷宫的每一层都可以停电梯,而且第i层 (1<=i<=N)上有一个数字Ki(0<=Ki<=N),电梯内只提供四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:4 2 1 2 5代表了Ki(K1=4,K2=2,……),从一楼开始。在一楼,按“上”可以到5楼,按“下”是不起作用的,因为没有-3楼。进入迷宫中的人都想尽可能地少按电梯到达目的地,假如给你出发楼层A和目的楼层B,请你帮忙求出从A层到B层至少要按几次按钮。

【输入文件】

输入文件共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N),第二行为N个用空格隔开的正整数,表示Ki。

【输出文件】

输出文件仅一行,即最少按键次数,若无法到达,则输出-1。

【输入样例】

5 1 5

4 2 1 2 5

【输出样例】

1


  4.足球联赛(football.bas/ football.pas/ football.c)

【问题描述】

为了庆祝元旦,J市决定举办全市小学足球联赛。各学校积极响应,共有N支球队报名参加,爱好足球的小W也参加了。为了活动的开展和不影响学生学习,只能安排K场比赛,每支球队最多参加两场比赛,至少参加零场比赛。因球队水平不同,每支球队都拥有一个和其他球队不同的水平等级(用一个正整数来表示)。在比赛中,等级高的球队必须作为客场,等级低的球队必须作为主场。每个球队最多只能做一次主场和一次客场。为了增加比赛的观赏度,观众希望K场比赛中球队水平差距的总和最小。比如有7支球队,他们的等级分别是30、17、26、41、19、38、18,要进行3场比赛。那么最好安排是球队2 vs 球队7, 球队7 vs 球队5 ,球队6 vs 球队4,此时等级差的总和等于(18-17) + (19-18) + (41-38) = 5达到最小。

【输入文件】

第一行两个正整数N ,K。

接下来有N 行,第i行表示第i 支球队的等级。

【输出文件】

共一行,输出最小的等级差的总和。

【样例输入】

7 3 

30 

17 

26 

41 

19 

38 

18

【样例输出】

5

【数据范围】

对于20%的数据,1≤N≤300 

对于80%的数据,1≤N≤5000

对于100%的数据,1≤N≤10000 

保证所有输入数据中等级的值小于32000,1 ≤K≤ N-1

回复列表 (共14个回复)

沙发

第2题:
参考
program t2;
var
a:array[1..10000] of real;
m,n:integer;
begin
read (n);
a[1]:=1;
a[2]:=2;
for m:=3 to n do
a[m]:=a[m-1]+a[m-2];
writeln (a[n]:0:0);
end.

板凳

真好好好

3 楼

帅呆了

4 楼

我不知道对不对,
4:
program t4;
var
q,w,e,r,t,y,u,i,o,p,s,d,f,g,h,j,k,l,z,x,v,n,m:integer;
a:array[1..10000] of integer;
b:array[1..10000,1..10000] of integer;
c:array[1..10000] of integer;
begin
readln (n,m);
for i:=1 to n do readln (a[i]);
for i:=1 to n do
for j:=1 to n do
begin
b[i,j]:=a[j]-a[i];
end;
for i:=1 to 10000 do
c[i]:=10000;
for i:=1 to m do
for j:=1 to n do
if b[i,j]<c[i] then c[i]:=b[i,j];
for i:=1 to m do
s:=s+c[i];
writeln (s);
end.

5 楼

应该是对的

6 楼

第二题其实的就是下面题目的等效问题:
给一个钱数(单位角),把它换成1角和两角的,其中两角的有新票和旧票两种。如果三种钱票面都足够,那请问共有多少种换法?

7 楼

第二题就是高精度版的斐不拉契数列

8 楼

我做过,只不过程序删了

9 楼

//第一题;
program taxi;
var
   n,m:integer;
   s:real;
begin
   readln(n,m);
   s:=s+(m div 5);
   if n<=2 then s:=s+6
           else if n<=10 then s:=s+3+1.2*n
                         else s:=s+10.5+1.8*n;
   writeln(round(s));
   readln;
end.

10 楼

//第二题(要拿满分得用高精啊!)
program wall;
var
   x1,x2,x3:array[0..50]of integer;
   i,j,k,n:longint;
procedure get;
var i:longint;
begin
   for i:=1 to x3[0] do if x3[i]>=10 then begin
     x3[i+1]:=x3[i+1]+x3[i] div 10;
     x3[i]:=x3[i] mod 10;
   end;
   if x3[x3[0]+1]>0 then inc(x3[0]);
end;

begin
   readln(n);
   x1[0]:=1; x1[1]:=1;
   x2[0]:=1; x2[1]:=2;
   x3[0]:=1; x3[1]:=3;
   k:=3;
   while k<n do begin
     for i:=1 to x3[0]do x1[i]:=x2[i];
     for i:=1 to x3[0]do x2[i]:=x3[i];
     for i:=1 to x3[0]do x3[i]:=x1[i]+x2[i];
     get;
     inc(k);
   end;
   j:=50;
   while x3[j]=0 do dec(j);
   for i:=j downto 1 do write(x3[i]); writeln;
   readln;
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册