火车过站

原创 2014年04月10日 20:39:18
问题描述
  火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问x站开出时车上的人数是多少?
输入格式
  输入包含一行, 有四个正整数:a(a<=100),n(n<=20),m(m<=10000)和x(x<=19)
输出格式
  输出为一个整数,为x站开出时车上的人数。
/*
 * 第几站   上车        下车         车上人数
 * 1          a1          0             a1
 * 2          a2          a2            a1
 * 3         a1+a2        a2            a1+a1
 * 4         a1+a2+a2     a1+a2         a1+a1+a2
 * 5    a1+a2+a1+a2+a2    a1+a2+a2      a1+a1+a2+a1+a2 
 * .           .            .               .
 * .           .            .               .
 * .           .            .               .
 * 到最后一站的人数就是m ,全部下完
 * 思路,只要统计出a1个数和a2的个数就能求出a2,其中a1已经给出,m的数量就是n-1车站的开车的人数
 * a2=(m-a1*a1的个数)/a2的个数
 * 
 * */
import java.util.*;

public class Main3 {
	public static int a, n, m, x;
	// 上车的人数
	public static int[][] arrays;
	// 车上人数
	public static int[][] sum;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		a = sc.nextInt();
		n = sc.nextInt();
		m = sc.nextInt();
		x = sc.nextInt();
		arrays = new int[20][2];
		sum = new int[20][2];
		// 上车人数
		arrays[0][0] = 1;
		arrays[0][1] = 0;
		arrays[1][0] = 0;
		arrays[1][1] = 1;

		for (int i = 2; i < n - 1; i++) {
			arrays[i][0] = arrays[i - 1][0] + arrays[i - 2][0];
			arrays[i][1] = arrays[i - 1][1] + arrays[i - 2][1];
		}

		// 车上人数
		sum[0][0] = 1;
		sum[0][1] = 0;
		sum[1][0] = 1;
		sum[1][1] = 0;
		for (int i = 2; i < n - 1; i++) {
			sum[i][0] = sum[i - 1][0] + arrays[i - 2][0];
			sum[i][1] = sum[i - 1][1] + arrays[i - 2][1];
		}
		// System.out.println(sum[n - 2][0] + " " + sum[n - 2][1]);
		// 求a2
		int a2 = (m - sum[n - 2][0] * a);
		if (a2 != 0) {
			a2 = a2 / sum[n - 2][1];
		}
		// 求第x站的人数
		System.out.println(sum[x - 1][0] * a + sum[x - 1][1] * a2);
	}
}

相关文章推荐

【codevs2287】火车站,第一个A掉的钻石题(迟来的解题报告)

2287 火车站  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Descripti...

火车站

Problem Description 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前...

上车人数

公共汽车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第...
  • w00w12l
  • w00w12l
  • 2011年07月26日 17:49
  • 1104

SCU 1118 上车人数

【问题描述】 公共汽车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第...
  • modiz
  • modiz
  • 2013年11月27日 10:16
  • 1037

信息学奥林匹克竞赛-车站

车站 题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人...

noip1998火车过站 (斐波那契数列)

A1117. 火车过站 时间限制:1.0s   内存限制:256.0MB   总提交次数:861   AC次数:264   平均分:39.59 将本题分享到:     ...

HDU 1022 火车进出站问题

Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota...

【华为OJ】【072-火车进站】

【华为OJ】【算法总篇章】【华为OJ】【072-火车进站】【工程下载】题目描述给定一个正整数N代表火车数量,0...

C++ LOL OJ 计算火车停站方案

我们都知道,火车沿途会经过各种大大小小的站,火车在可能会跳过某些站不停靠,但是肯定不会连续跳过两站及以上。假设沿途一共会有m个站台(火车起初停靠在第一站),一共有多少种不同的停站方案——使用斐波那契数...

火车进站(全排列)

Problem 44: 火车进栈 Time Limit:1 Ms| Memory Limit:128 MB Difficulty:2 Description 有n列火车按1到n的顺序从东方...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:火车过站
举报原因:
原因补充:

(最多只允许输入30个字)