题目:
节水活动(小学)
时间限制: 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
s
do
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
.