There is a supermarket that is frequented by many customers. The products sold at the supermarket are represented as two parallel integer arrays products and prices, where the ith product has an ID of products[i] and a price of prices[i].

When a customer is paying, their bill is represented as two parallel integer arrays product and amount, where the jth product they purchased has an ID of product[j], and amount[j] is how much of the product they bought. Their subtotal is calculated as the sum of each amount[j] * (price of the jth product).

The supermarket decided to have a sale. Every nth customer paying for their groceries will be given a percentage discount. The discount amount is given by discount, where they will be given discount percent off their subtotal. More formally, if their subtotal is bill, then they would actually pay bill * ((100 - discount) / 100).

Implement the Cashier class:


	Cashier(int n, int discount, int[] products, int[] prices) Initializes the object with n, the discount, and the products and their prices.
	double getBill(int[] product, int[] amount) Returns the final total of the bill with the discount applied (if any). Answers within 10-5 of the actual value will be accepted.


&nbsp;
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. 1st customer, no discount.
                                                     // bill = 1 * 100 + 2 * 200 = 500.
cashier.getBill([3,7],[10,10]);                      // return 4000.0. 2nd customer, no discount.
                                                     // bill = 10 * 300 + 10 * 100 = 4000.
cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]);    // return 800.0. 3rd customer, 50% discount.
                                                     // Original bill = 1600
                                                     // Actual bill = 1600 * ((100 - 50) / 100) = 800.
cashier.getBill([4],[10]);                           // return 4000.0. 4th customer, no discount.
cashier.getBill([7,3],[10,10]);                      // return 4000.0. 5th customer, no discount.
cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // return 7350.0. 6th customer, 50% discount.
                                                     // Original bill = 14700, but with
                                                     // Actual bill = 14700 * ((100 - 50) / 100) = 7350.
cashier.getBill([2,3,5],[5,3,2]);                    // return 2500.0.  6th customer, no discount.


&nbsp;
Constraints:


	1 &lt;= n &lt;= 104
	0 &lt;= discount &lt;= 100
	1 &lt;= products.length &lt;= 200
	prices.length == products.length
	1 &lt;= products[i] &lt;= 200
	1 &lt;= prices[i] &lt;= 1000
	The elements in products are unique.
	1 &lt;= product.length &lt;= products.length
	amount.length == product.length
	product[j] exists in products.
	1 &lt;= amount[j] &lt;= 1000
	The elements of product are unique.
	At most 1000 calls will be made to getBill.
	Answers within 10-5 of the actual value will be accepted.


class Cashier:

    def __init__(self, n: int, discount: int, products: List[int], prices: List[int]):
        
        self.n = n 
        self.discount = discount 
        self.price = { }
        self.customer = 0 
        
        for i in range(len(products))  : 
            self.price[products[i]] = prices[i]

    def getBill(self, product: List[int], amount: List[int]) -> float:
        
        self.customer += 1
        
        bill = 0 
        
        for i in range(len(product)) : 
            bill += amount[i] * self.price[product[i]]
        
        
        if self.customer == self.n : 
            bill = bill * (1 - self.discount / 100)
            self.customer = 0 
            
            
        return bill
            
        


# Your Cashier object will be instantiated and called as such:
# obj = Cashier(n, discount, products, prices)
# param_1 = obj.getBill(product,amount)
class Cashier {
    private Map<Integer, Integer> catalogue;
    
    private int n;
    private double discount;
    private int orderNumber;
    
    public Cashier(int n, int discount, int[] products, int[] prices) {
        this.catalogue = new HashMap<>();
        
        for (int i = 0; i < prices.length; i++) {
            this.catalogue.put(products[i], prices[i]);
        }
        
        this.n = n;
        this.discount = ((double) 100 - discount)/100;
        this.orderNumber = 0;
    }
    
    public double getBill(int[] product, int[] amount) {
        this.orderNumber++;
        
        double bill = 0.0;
        for (int i = 0; i < amount.length; i++) {
            int p = product[i];
            int price = this.catalogue.get(p);
            bill += price*amount[i];
        }
        
        if (this.orderNumber % n == 0)
            bill *= this.discount;
        
        return bill;
    }
}

/**
 * Your Cashier object will be instantiated and called as such:
 * Cashier obj = new Cashier(n, discount, products, prices);
 * double param_1 = obj.getBill(product,amount);
 */
class Cashier {
public:
    int nn = 0;
    double dis = 0;
    vector<int> pro;
    vector<int> pri;
    int currCustomer = 0; //Declaring these variables here to use it in other fxns as well
    
    Cashier(int n, int discount, vector<int>& products, vector<int>& prices) {
        nn = n;
        dis = discount;
        pro = products;
        pri = prices; //Assigning given values to our created variables
    }
    
    double getBill(vector<int> product, vector<int> amount) {
        currCustomer++; //Increasing customer count
        double bill = 0; //Bill anount set to 0
        for(int i = 0; i < product.size(); i++){ //Iterating over every product
            int proId = 0; 
            
            while(pro[proId] != product[i]) proId++; //Finding product ID index
            
            bill = bill + (amount[i]*pri[proId]); //Adding total amount to bill
        }
        
        if(currCustomer == nn){ //Checking if the customer is eligible for discount
            bill = bill * (1 - dis/100); //Giving discount
            currCustomer = 0; //Setting customer count to 0 so next third person can have discount
        }
        return bill; //Returning final bill amount
    }
};
var Cashier = function(n, discount, products, prices) {
    this.n = n;
    this.cc = 0;
    this.discount = (100 - discount) / 100;
    this.products = new Map();
    const len = products.length;
    for(let i = 0; i < len; i++) {
        this.products.set(products[i], prices[i]);
    }
};

Cashier.prototype.getBill = function(product, amount) {
    let total = 0, len = product.length;
    for(let i = 0; i < len; i++) {
        total += amount[i] * this.products.get(product[i]);
    }
    this.cc++;
    if(this.cc % this.n == 0) {
        total = total * this.discount;
        this.cc = 0;
    }
    return total;
};
Apply Discount Every n Orders