余姚小学2016Pascal全题解答

题目:

节水活动(小学)

时间限制: 1 Sec  内存限制: 128 MB
[提交][状态][讨论版]

题目描述

小明向小学生们发起了一个节约用水的活动,在他的鼓舞下,大家都纷纷行动起来,并且把节水成果陆续发给小明。

小明共收到了来自全国各地的N份节水成绩单,每份中都标注了该小朋友节水的天数Di和每天节水数Li。现在摆在小明面前一个头疼的问题,到底这个活动节约了多少自来水呢?请你帮他算一下吧

 

输入

第一行一个整数N,表示小明收到的节水成绩单的数量。

接下来N行,每行两个整数Di和Li,表示第i位小朋友节水天数和每天节水数量。

 

输出

输出N个小朋友共节水数量。

 

样例输入

3
3 4
2 1
6 3

样例输出

32

提示

 

【样例解释】

 

共3位小朋友的节水成绩单,总节水量:3*4+2*1+6*3=32

 

【数据范围】

 

30%的数据,N<=3, 1<=Di<=100,1<=Li<=100.

 

70%的数据,N<=1000, 1<=Di<=100,1<=Li<=100

 

100%的数据,N<=1000000,1<=Di<=100,1<=Li<=100

远足活动(小学)

时间限制: 1 Sec  内存限制: 128 MB
[提交][状态][讨论版]

题目描述

小明决定徒步完成一个N天的远足登山活动。第一天他带上一个大睡袋和足够的食物,从大本营出发。大本营的海拔高度为0,在第N天,他必须回到大本营。在这N天中,他可以在他的大睡袋和简易的帐篷中入睡。

在每天的登山活动中,他可以选择向山顶出发,也可以选择下山(同一天只能选择一种方式),而且有如下两条规则:

1、  在登山过程中,他不能走的太快,海拔的升高的过程,空气的含氧量会发生变化,因此每天只能上升A米的海拔。

2、  在下山过程中,他也不能走的太快,否则他的膝盖无法承受冲击。每天他只能下降B米的海拔。

例如:某天早晨小明处在470米的海拔位置,A=100且B=100,那么他在这天中可以向上到达570米的位置,也可以下山达到海拔270米的位置,因此一天结束后,他可能处在的海拔位置在270~570米之间。

现在,给定N,A和B,问小明最多能到达海拔多少米的高度。

 

输入

第一行三个整数,N,A和B,表示N天的登山远足活动,每天可以向上爬海拔A米,也可以下山下降海拔B米。

 

输出

输出一个整数,表示在第N天中能到达的最高海拔高度。

 

样例输入

3 7 10

样例输出

10

提示

 

【样例1解释】

 

第一天向上爬7,第二天向上爬3到达海拔10,第三天回到大本营。

 

【输出输出样例2】

 

5 40 30

 

80

 

【样例2解释】

 

第一天和第二天分别向上爬40,后面3天下山分别30+30+20

 

【数据范围】

 

对于50%的数据,2<=n<=20,1<=A,B<=50

 

对于100%的数据,2<=n<=200,1<=A,B<=200

交替01串(小学)

时间限制: 1 Sec  内存限制: 128 MB
[提交][状态][讨论版]

题目描述

一个交替01串被定义为一个字符串,只有字符“0”和“1”组成,且任意相邻两个字符都是不同的。例如:”1“,”10101“,”0101010“都是交替01串

现在给定一个01字符串s,问其中最长的连续子串,是交替01串的长度是多少?

 

输入

输入共一行,一个字符串s,只有字符”0“或者”1“组成。

 

输出

输出一个整数,表示最长的交替01串长度。

 

样例输入

1110111

样例输出

3

提示

 

【样例1解释】

 

最长串为“101”

 

【输出输出样例2】

 

0101011

 

6

 

【数据范围】

 

对于30%的数据,s的长度<=100

 

对于70%的数据,s的长度<=1000

 

对于100%的数据,s的长度<=1000000

回文数列(小学)

时间限制: 1 Sec  内存限制: 128 MB
[提交][状态][讨论版]

题目描述

小明非常喜欢回文数列。回文数列是指一个包含N个整数的数列A,分别为A[1],A[2],……,A[n],对于第i(1<=i<=N)个数A[i],都有A[i]=A[N-i+1]。但是回文数字非常难得到。

现在小明想到了一个办法,他可以将数列中,任意两个相邻的数字合并,用它们的和来代替,合并完成的值还可以和其他值不断合并,直到只剩下一个数。要知道一个数肯定是回文数列。

当然,小明希望他的回文数列尽可能长,因此,请你帮助小明计算一下,对于一个长度为N的数列,经过最少多少次合并,可以构成一个回文数列。

 

输入

第一行一个整数N,表示数列中整数的个数。

第二行包含N个正整数,中间用空格分开,表示数列中的数字。

 

输出

输出一个最小合并次数,使得数列变成回文数列。

 

样例输入

3
1 2 3

样例输出

1

提示

 

【样例1解释】

 

将1,2合并得到回文数列3 3

 

【输出输出样例2】

 

5

 

1 2 4 6 1

 

1

 

【样例2解释】

 

将2,4合并,得到回文数列1 6 6 1

 

【输出输出样例3】

 

4

 

1 4 3 2

 

2

 

【样例3解释】

 

先将1和4合并,得到5 3 2,再将3 2合并得到5 5是回文数列

 

【数据范围】

 

30%的数据,N<=10

 

60%的数据,N<=1000

 

100%的数据,N<=1000000

解答:

节水活动:

var

  n,i,a,b:longint;

  s:int64;

begin

  readln(n);

  for i:=1 to n do

  begin

    readln(a,b);

    s:=s+a*b;

  end;

  writeln(s);

end.

远足活动:

var

  n,a,b,y,x,s:longint;

  fp:boolean;

begin 

  readln(n,a,b);

  fp:=true;

  while fp do

  begin

    x:=x+1;

    y:=x*a;

    s:=(n-x)*b;

    if y>s then

    begin

      y:=(x-1)*a;

      while s>y do

      inc(y);

      break;

    end;

  end;

  writeln(y);

end.

交替01串:

i,j,s,max:longint;
  boo:boolean;
begin
  max:=1;
  s:=1;
  while not eoln do
  begin
    read(ch);
    i:=i+1;
    if ch='1' then bo[i]:=true
    else bo[i]:=false;
  end;
  boo:=true;
  while boo do
  begin
    j:=j+1;
    if (bo[j]=not(bo[j+1])) and (jmax then max:=s;
      s:=1;
    end;
    if j>i then boo:=false;
  end;
  write(max);
end.

回文数组:

var

  a:array[1..1000000] of longint;

  n,i,s,t,c:longint;

begin

  read(n);

  for i:=1 to n do

  read(a[i]);

  s:=1;

  t:=n;

  c:=0;

  while sdo

  begin

    if a[s]=a[t] then

    begin

      s:=s+1;

      t:=t-1;

    end

    else if a[s]then

         begin

           a[s+1]:=a[s]+a[s+1];

           s:=s+1;

           c:=c+1;

         end

         else begin

                a[t-1]:=a[t]+a[t-1];

                t:=t-1;

                c:=c+1;

              end;

  end;

  writeln(c);

end.

转载于:https://my.oschina.net/u/3233411/blog/828627

你可能感兴趣的:(余姚小学2016Pascal全题解答)