zoukankan      html  css  js  c++  java
  • 牛客2018java模拟编程题

    计算把钱全付房租能过几天,把已有的水果换成钱计算买水果和付房租能撑过几天,取小的那个即可。

    Scanner in = new Scanner(System.in);
    while (in.hasNextInt()) {// 注意while处理多个case
        long x = in.nextLong();
        long f = in.nextLong();
        long d = in.nextLong();
        long p = in.nextLong();
        
        long res = (d+f*p)/(x+p);//把已有的水果转换成钱计算能撑过几天
        System.out.println(Math.min(res, d/x));//d除以x是把钱全付房租能撑过的天数
    }

    两个三盒的以及三个两盒的合并,最多能剩下一个三盒与两个两盒,按照需要的一盒数量从小到大筛选

    一盒数量 两盒数量 三盒数量 撑过天数
    5 2 1 2
    1 1 1 1
    2 2 0 1
    3 0 1 1
    4 1 0 1
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int T = in.nextInt();
    while(T!=0){
    int N = in.nextInt();
    int A1 = in.nextInt();
    int A2 = in.nextInt();
    int A3 = in.nextInt();
    
    int max = A3/2+A2/3;
    A3=A3%2;
    A2=A2%3;
    if(A3==1&&A2==2&&A1>=5){//按照表格的顺序判断
        max+=2;
        A1-=5;
    }else if (A3==1&&A2>=1&&A1>=1) {
        max++;
        A1-=1;
    }else if (A3==0&&A2==2&&A1>=2) {
        max++;
        A1-=2;
    }else if(A3==1&&A1>=3){
        max++;
        A1-=3;
    }else if (A2==1&&A1>=4) {
        max++;
        A1-=4;
    }
    max+=A1/6;
    System.out.println(max>=N?"Yes":"No");
    
    T--;

    第三题时间不够了用邻接矩阵写了一发最暴力的dfs,过了30%,可能用邻接表能ac或者得用别的方法做吧。

    static int [][] road;
    static int min;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {//注意while处理多个case
            int n = in.nextInt();
            int M = in.nextInt();
            int S = in.nextInt();
            int T = in.nextInt();
            road = new int[n+1][n+1];
            for(int i = 0;i<M;i++){
                int s = in.nextInt();
                int t = in.nextInt();
                int D = in.nextInt();
                road[s][t] = D;
            }
            min = Integer.MAX_VALUE;
            dfs(S, T, 0);
            int res = min;
            min = Integer.MAX_VALUE;
            dfs(T, S, 0);
            res+=min;
            System.out.println(res);
        }
    }
    static void dfs(int s,int t,int d){
        if(s==t){
            min = Math.min(min, d);
            return;
        }
        int temp;
        for(int i =0;i<road.length;i++){
            if((temp=road[s][i])!=0){
                road[s][i] = 0;
                dfs(i, t, d+temp);
                road[s][i] = temp;
            }
        }
    }

    题目应该都不是特别难,但是第二题卡了挺久的,比较考验排查问题的能力。第三题等可以再次提交了再来更新一波。

    ----------------------------------------------------------------

    2018年5月26日 00:58:11 更新:第三题用dijkstra过80%样例依旧超时(https://www.cnblogs.com/zzzdp/p/9091372.html)

  • 相关阅读:
    解决CentOS java环境不生效的问题
    大数据学习 概念篇
    java实用技能 上传文件 等等
    ubuntu hadoop伪分布式部署
    list去重
    fastjson生成JSON字符串的时候出现$ref
    《Swift by Tutorials》学习笔记(第二章)
    《Swift by Tutorials》学习笔记(第一章)
    《JavaScript高级程序设计》学习笔记(第七章)
    《JavaScript高级程序设计》学习笔记(第五章)- 下
  • 原文地址:https://www.cnblogs.com/zzzdp/p/9079725.html
Copyright © 2011-2022 走看看