【求解】noip火车站问题,不要答案,要思想
pascal吧
全部回复
仅看楼主
level 14
【问题描述】
火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出是(即在到达第3 站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定的规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问从x站开出是车上的人数是多少?若无解输出“No answer.”(所有数据均在longint范围内)。
【输入格式】a,n,m和x
【输出格式】x站开出时车上的人数
【输入样例】railway.in
1 6 7 3
【输出样例】railway.out
2
2014年02月12日 13点02分 1
level 14
求大神@82111668_2012
2014年02月12日 13点02分 2
我来了.
2014年02月12日 15点02分
level 14
今天有点晚了,我先分析一下大体思想,明天给你调程序,好吧。
2014年02月12日 15点02分 3
level 11
这是一道递推算法题,递推公式为 :
上车人数s【x】:=s【x-1】+s【x-2】;
下车人数为s【x-1】;
总人数a【x】:=s【x】-s【x-1】 ;
可以发现结果满足斐波那契数列规律。
2014年02月13日 00点02分 5
我也是这样想的啊,发现不对。。。然后百度了一下,看不懂为什么要这么做。。。
2014年02月13日 08点02分
level 8
。你自己拿样例或者编点,在纸上写写就找到规律了,有的解释很费劲,题目故意遮掩整人。
2014年02月13日 12点02分 6
level 8
不需要高精,直接递推就好了
2014年02月13日 12点02分 7
level 1
var a,b,c,d,i,j:longint;
s,x,z:array[0..10000] of longint;
begin
readln(a,b,c,d);
j:=-1;
while true do
begin
inc(j);s[1]:=0;z[1]:=0;s[2]:=j;x[2]:=j;z[2]:=0;
for i:=3 to b-1 do
begin
s[i]:=s[i-1]+s[i-2];
x[i]:=s[i-1];
z[i]:=z[i-1]+s[i]-x[i];
end;
大神们,哪错了
if z[b-1]=c then
begin
writeln(z[d]);
halt;
end;
if z[b-1]>c then
begin
writeln('NO answer.');
halt;
end;
end;
end.
2014年12月20日 01点12分 8
不会超时吗?
2016年02月12日 05点02分
那个“while true do''不是死循环么,而且这样数据一大就很容易超时啊
2016年07月28日 13点07分
level 1
谁有c++答案
2016年02月11日 06点02分 10
为什么要来P吧?
2016年02月12日 05点02分
1