P1011 [NOIP1998 提高组] 车站 ---Java

2023-12-19 00:43:39

主打一个枚举找规律...

站台123456...
上车aba+ba+2b2a+3b3a+5b
下车bba+ba+2b2a+3b
人数aa2a2a+b3a+2b4a+4b

上车这一行: 观察a的系数(假设是dx[i])可知: dx[i] = dx[i-1] + dx[i-2]

b的系数(假设是dy[i])可知: dy[i] = dy[i-1] + dy[i-2]

人数: (假设为p[i])p[i] = (dx[i] + 1) * a + (dy[i] -1)* b

import java.util.Scanner;

/**
 * @Author YuLing
 * @Date 2023-12-17 18:09
 * @Description: 车站
 * @Version 1.0
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();//已知
        int n = scanner.nextInt();//已知 则需要找到n-1
        int m = scanner.nextInt();//已知
        int x = scanner.nextInt();
        //destination: 从x站开出车上的人数
        int[] dx = new int[n + 1];//a的系数
        int[] dy = new int[n + 1];//b的系数
        dx[1] = 1;
        dx[2] = 0;
        for (int i = 3; i < n; i++) {
            dx[i] = dx[i - 1] + dx[i - 2];
        }
        dy[1] = 0;
        dy[2] = 1;
        for (int i = 3; i < n; i++) {
            dy[i] = dy[i - 1] + dy[i - 2];
        }
        //(dx[n-1]+1)*a+(dy[n-1]-1)*b=m
        int b = (m - (dx[n - 1] + 1) * a) / (dy[n - 1] - 1);
//        System.out.println("b = " + b);
        //从x站开出时车上的人数
        int px = (dx[x] + 1) * a + (dy[x] - 1) * b;
        System.out.println(px);
    }
}

文章来源:https://blog.csdn.net/m0_59925573/article/details/135069844
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。