zoukankan      html  css  js  c++  java
  • 1357. Apply Discount Every n Orders

    There is a sale in a supermarket, there will be a discount every n customer.
    There are some products in the supermarket where the id of the i-th product is products[i] and the price per unit of this product is prices[i].
    The system will count the number of customers and when the n-th customer arrive he/she will have a discount on the bill. (i.e if the cost is x the new cost is x - (discount * x) / 100). Then the system will start counting customers again.
    The customer orders a certain amount of each product where product[i] is the id of the i-th product the customer ordered and amount[i] is the number of units the customer ordered of that product.

    Implement the Cashier class:

    • Cashier(int n, int discount, int[] products, int[] prices) Initializes the object with n, the discount, the products and their prices.
    • double getBill(int[] product, int[] amount) returns the value of the bill and apply the discount if needed. Answers within 10^-5 of the actual value will be accepted as correct.

    Example 1:

    Input
    ["Cashier","getBill","getBill","getBill","getBill","getBill","getBill","getBill"]
    [[3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]],[[1,2],[1,2]],[[3,7],[10,10]],[[1,2,3,4,5,6,7],[1,1,1,1,1,1,1]],[[4],[10]],[[7,3],[10,10]],[[7,5,3,1,6,4,2],[10,10,10,9,9,9,7]],[[2,3,5],[5,3,2]]]
    Output
    [null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0]
    Explanation
    Cashier cashier = new Cashier(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]);
    cashier.getBill([1,2],[1,2]);                        // return 500.0, bill = 1 * 100 + 2 * 200 = 500.
    cashier.getBill([3,7],[10,10]);                      // return 4000.0
    cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]);    // return 800.0, The bill was 1600.0 but as this is the third customer, he has a discount of 50% which means his bill is only 1600 - 1600 * (50 / 100) = 800.
    cashier.getBill([4],[10]);                           // return 4000.0
    cashier.getBill([7,3],[10,10]);                      // return 4000.0
    cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // return 7350.0, Bill was 14700.0 but as the system counted three more customers, he will have a 50% discount and the bill becomes 7350.0
    cashier.getBill([2,3,5],[5,3,2]);                    // return 2500.0
    

    Constraints:

    • 1 <= n <= 10^4
    • 0 <= discount <= 100
    • 1 <= products.length <= 200
    • 1 <= products[i] <= 200
    • There are not repeated elements in the array products.
    • prices.length == products.length
    • 1 <= prices[i] <= 1000
    • 1 <= product.length <= products.length
    • product[i] exists in products.
    • amount.length == product.length
    • 1 <= amount[i] <= 1000
    • At most 1000 calls will be made to getBill.
    • Answers within 10^-5 of the actual value will be accepted as correct.

    题目出这么长的leetcode实属人间之屑

    题意是设计一个class,能初始化cashier和getbill,每n个人有一个可以获得discount

    class Cashier {
        public int mod = 0;
        int n = 0;
        double disc = 0;
        private int[] products;
        private int[] prices;
        public Cashier(int n, int discount, int[] products, int[] prices) {
            this.n = n;
            disc = discount;
            this.products = products;
            this.prices = prices;
        }
        
        public double getBill(int[] product, int[] amount) {
            mod ++;
            double bill = 0;
            for(int i = 0; i < product.length; i++){
                for(int j = 0; j < products.length; j++){
                    if(products[j] == product[i]) bill += prices[j] * amount[i];
                }
                
            }
            return mod % n == 0 ? (bill*(1 - disc / 100)) : bill;
        }
    }

    方法一:一时大意忘了hashmap这个东西,就感觉怪怪的

    class Cashier {
        private int mod = 0;
        private Map<Integer, Integer> map;
        private double disc = 0;
        private int n = 0;
        public Cashier(int n, int discount, int[] products, int[] prices) {
            this.n = n;
            disc = discount;
            this.map = new HashMap();
            for(int i = 0; i < products.length; i++) map.put(products[i], prices[i]);
        }
        
        public double getBill(int[] product, int[] amount) {
            mod ++;
            double bill = 0;
            for(int i = 0; i < product.length; i++){
                bill += map.get(product[i]) * amount[i];
            }
            return mod % n == 0 ? (bill*(1 - disc / 100)) : bill;
        }
    }

    用hashmap来记录products和prices

  • 相关阅读:
    【JSOI 2008】 最大数
    【Usaco2008 Dec】Patting Heads
    【AHOI 2005】 约数研究
    【HAOI2007】反素数
    BZOJ3676 APIO2014回文串(manacher+后缀自动机)
    Luogu3804 【模板】后缀自动机(后缀自动机)
    后缀自动机学习笔记
    Codeforces ECR47F Dominant Indices(线段树合并)
    BZOJ1127 POI2008KUP(悬线法)
    BZOJ4652 NOI2016循环之美(莫比乌斯反演+杜教筛)
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12360267.html
Copyright © 2011-2022 走看看