Header Ads Widget

Chef and Time Machine | codechef solution

Chef spent N days working really hard! He planned loads of tasks: as many as Ai tasks to do on the ith day! Chef's work was brutal, so he only managed to finish Bi tasks on the ith day.

The good news is that Chef has a Time Machine!

The Time Machine has K white buttons and M black buttons. Each button has a positive integer printed on it. Now Chef goes through all N days consequently and presses buttons. Each day Chef can only press one button (either white or black). After using a button once, it becomes inactive.

Pressing a white button with integer x printed on it reduces the number of planned tasks on the day it was pressed by exactly x. Note that this white button can only be pressed if number of planned tasks on the day are greater than or equal to x.

Pressing a black button with integer x printed on it increases the number of completed tasks on the day it was pressed by exactly x. Note that this black button can only be pressed if after pressing it, number of completed tasks don't exceed the number of tasks.

Chef is interested in finding the minimum possible amount of total uncompleted tasks he will still be left with after N days using the Machine in the best way?

Be careful! Time is sensitive! Chef cannot make a day when he completed more tasks then planned, as this may result in a more-work-than-planned paradox, killing all lazy people on the planet!

Input

  • The first line of input contains a single integer T, denoting the number of test cases. Description of T test cases follows.
  • The first line of each test case contains three integers — N, K, M — denoting the number of days, white and black buttons appropriately.
  • The second line contains N space-separated integers A1A2, … , AN, denoting the number of planned tasks.
  • The third line contains N space-separated integers B1B2, … , BN, denoting the number of completed tasks.
  • The fourth line contains K space-separated integers C1C2, … , CK, denoting the integers on white buttons.
  • The fifth and last line contains M space-separated integers D1D2, … , DM, denoting the integers on black buttons.

Output

  • In a single line, output an integer — the minimum possible amount of uncompleted tasks.

Constraints

  • 1 ≤ T ≤ 4
  • 1 ≤ N, K, M ≤ 10^5
  • 1 ≤ Bi ≤ Ai ≤ 10^5
  • 1 ≤ CiDi ≤ 10^5

Subtasks

  • Subtask N ≤ 10K, M ≤ 5. Points: 30
  • Subtask Original constraints. Points: 70

Sample 1:

Input
Output
1
4 2 2 
5 7 6 1
3 3 1 1
6 3
1 4
3

Explanation:

Example case 1.
In this example Chef goes through the following steps:
Use black button 1 on the first day.
Use black button 4 on the second day.
Use white button 3 on the third day.
The arrays A and B are now effectively changed to:
5 7 3 1
4 7 1 1
So he will have 3 uncompleted tasks.

 Code(C++):-

#define ll long long
#define pb push_back
#define F first
#define S second
#define I insert
#define vll vector<ll>
#define loo(i,n) for(long long i=0;i<n;i++)     
#include <bits/stdc++.h>
using namespace std;
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif
    ll t;
    cin>>t;
    while(t--){
        ll n,k,m;
        cin>>n>>k>>m;
        vll a(n),b(n),rem;
        priority_queue<ll>prem,p1,p2;
        loo(i,n){
            cin>>a[i];
        }
        loo(i,n){
            cin>>b[i];
        }
        loo(i,n){
            rem.pb(a[i]-b[i]);
        }
        multiset<ll>st;
        loo(i,m+k){
            ll x;
            cin>>x;
            st.I(x);
        }
        ll res=0;
        for(ll i=0;i<n;i++){
            auto it=st.upper_bound(rem[i]);
            if(it!=st.begin()){
                it--;
                res+=(rem[i]-(*it));
                st.erase(it);
            }
            else{
             res+=rem[i];
            }
        }
        cout<<res<<endl;
    }
    return 0;
}

Code(JAVA):-

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while(T-->0){
         int n = sc.nextInt();
         int k = sc.nextInt();
         int m = sc.nextInt();
         int[] arr = new int[n];
         int[] brr = new int[n];
         for(int i=0;i<n ;i++){
         arr[i]= sc.nextInt();
         }
         for(int i=0;i<n ;i++){
         brr[i]= sc.nextInt();
         }
         int[] res = new int[k+m];
         for(int i=0;i<(k+m);i++){
         res[i] =sc.nextInt();
         }
         int[] diff = new int[n];
         for(int i=0;i<n ;i++){
         diff[i]= arr[i]-brr[i];
         }
         Arrays.sort(diff);
         Arrays.sort(res);
         int i=n-1;
         int j=k+m-1;
         long f = 0;
         while(i>=0&&j>=0){
         // System.out.println(diff[i]+" "+res[j]);
         if(diff[i]>=res[j]){
         f +=diff[i]-res[j];
         i--;
         j--;
         }else{
         j--;
         }
         }
         if(i>0){
         while(i>=0){
         f+=diff[i];
         i--;
         }
         }
         System.out.println(f);
        
        
        }
    }
}

Recommended Post :-

HCL Coding Questions:-

Capgemini Coding Questions:-

Companies interview:-

Full C course:-    

Key points:-

Cracking the coding interview:-

 Array and string:-

Tree and graph:-

Hackerearth Problems:-

Hackerrank Problems:-

Data structure:-

 MCQs:-