Saturday, 21 March 2015

Program in C/C++ for Vaccination Problem


Vaccination Problem


The world health organization wants to establish a total of B vaccination clinics across N cities to immunization people against fatal diseases. Every city must have at least 1 clinic, and a clinic can only vaccinate people in the same city where they live. The goal is to minimize the number of vaccination kits needed in the largest clinic. For example suppose you have.

1.       2 cities and
2.       7 clinics to be opened
3.       200.000 is the population of first city
4.       50,000 is the population of second city
5.       Two clinics can open in the first city and
6.       Five in the second. This way
7.       100,000 people can be immunized in each of the two clinics in first city, and
8.       100.000 people can be immunized in the each clinic in the second city
9.       So the maximum number of people to be immunized in the largest clinic is 10,000

Input:

Two integers in the first line, N, the number of cities, and B, the total number of clinics to be opened
Each of the following N lines contains an integer ai, the population of city i

Output:

One integer representing the maximum number of people to be immunized in any single clinic

Constraints:
1<=N<=500,000
N<=B<=2,000,000
1<=ai<=5,000,000

Sample input:

2 7
200000
500000

Sample output:

100000

Solution (In C) using qsort

==================================================================


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct city {
  long long population;
  long long num_of_clinics;
  long long load; /* population assigned per clinic */
} city;

int cmp_cities(const void * city1, const void *city2)
{

  city *mycity1 , *mycity2;
  mycity1 = (city *) city1;
  mycity2 = (city *) city2;

  return (mycity1->load - mycity2->load);
}

int main()
{
  long long  i;
  city cities[1024];
  long long num_of_cities, num_of_clinics;

  scanf("%lld %lld",&num_of_cities, &num_of_clinics);

  for(i = 0;i < num_of_cities; i++)
  {
    scanf("%lld", &cities[i].population);

    /* assign one clinic per city */
    cities[i].num_of_clinics = 1;
    
    /* Initial load per clinic is total population of city */
    cities[i].load = cities[i].population;
  }

  /* sort on the basis of load per clinic in increasing order*/
  qsort(cities, num_of_cities, sizeof(city),cmp_cities);


 /* assign one remaining clinic to the city 
  * having highest load (array is sorted in increasing
  * order) in each iteration to reduce the max load
  */
  for (i = 0; i < (num_of_clinics - num_of_cities); i++)
  {
    cities[num_of_cities -1].num_of_clinics ++;
    cities[num_of_cities -1].load = cities[num_of_cities -1].population/cities[num_of_cities -1].num_of_clinics;

    /* population=1001 and clinics=2 then load=501 */
    if (cities[num_of_cities -1].population%cities[num_of_cities -1].num_of_clinics)
      cities[num_of_cities -1].load++;

    /* Keep the array sorted in increasing order of load */
    qsort(cities, num_of_cities, sizeof(city),cmp_cities);
  }

  /* Dump the clinic having highest load */
  printf("%lld\n",cities[num_of_cities -1].load);

  return 0;
}

================================================================== 

Sample input 1:

3 7
2
42
48 

Output:

16

Sample input 2:

3 7
2
42
49

Output:

17
==================================================================

Solution (In C++) using priority_queue

==================================================================
#include <iostream>
#include <queue>

using namespace std;

struct city {
  long long population;
  long long num_of_clinics;
  long long load; /* population assigned per clinic */
};

class cmp_cities {
public:
    bool operator () (city &city1, city &city2) // Returns true if t1 is earlier than t2
    {
        if (city1.load < city2.load) return true;
        return false;
    }
};

int main()
{
  long long  i;
  city tmp_city;
  long long num_of_cities, num_of_clinics;
  priority_queue <city, vector<city>, cmp_cities> pq;

  cin >> num_of_cities >> num_of_clinics;

  for(i = 0;i < num_of_cities; i++)
  {
    cin >> tmp_city.population;

    /* assign one clinic per city */
    tmp_city.num_of_clinics = 1;

    /* Initial load per clinic is total population of city */
    tmp_city.load = tmp_city.population;

    pq.push(tmp_city);
  }


 /* assign one remaining clinic to the city
  * having highest load (priority_queue is sorted in increasing
  * order) in each iteration to reduce the max load
  */
  for (i = 0; i < (num_of_clinics - num_of_cities); i++)
  {
    tmp_city = pq.top();

    tmp_city.num_of_clinics ++;
    tmp_city.load = tmp_city.population/tmp_city.num_of_clinics;

    /* population=1001 and clinics=2 then load=501 */
    if (tmp_city.population%tmp_city.num_of_clinics)
      tmp_city.load++;

    pq.pop();

    /* priority_queue remains sorted in increasing order of load */
    pq.push(tmp_city);
  }

  /* Dump the clinic having highest load */
  tmp_city = pq.top();
  cout << tmp_city.load;

  return 0;
}

================================================================== 

Saturday, 1 March 2014

मेरी डायरी का एक पेज... 23 दिसंबर 2013, शनिवार


23 दिसंबर, शनिवार  

आज हम जा रहे है अपने नन्हे मुन्हे के लिए कुछ ऊनी कपडे खरीदने... परेड बाजार से अच्छी और जगह क्या हो सकती है.. हमारे जैसे मध्यमवर्ग के व्यक्ति के लिए..जो माल केवल घूमने जाते है शौपिंग करने नहीं... हम का मतलब मैं मेरी पत्नी और हमारे घर कि पहली बाइक.. हमारी प्यारी बाइक... 

लो बातें करते करते ही गया हमेशा कि तरह भीड़ भाड़ ुक्त प्यारा परेड मार्किट.. पर गाड़ी कहा खड़ी करनी है... वह जहा से लौटते वक़्त याद रहे... हां ये सही रहेगा ... कटरीना कैफ कि होर्डिंग के नीचे.. मैं कितना बुद्धिमान हु 

छोटे छोटे मोज़े छोटे छोटे स्वेटर... कितने सुन्दर लग रहे है... क्या ये पहले भी होते थे.. या शायद हमने अब गौर करना शुरू किया है.. अपने मुन्ने के आने के बाद.. पत्नी ने बोला अरे ये स्वेटर कितने प्यारे है .. खरीदते है... मैंने कहा नहीं नहीं स्वेटर बहुत सारे है उसके पास कुछ और लेते है... हां वो दस्ताने कितने प्यारे है.... अब मेरी पर्स हलकी होती जा रही थी और हाथ थैले से भरते जा रहे थे...
काफी शॉपिंग और पूछ ताछ के बाद हमें अहसास हुआ कि अब बहुत देर हो गयी...चलो वापस चलते है ... चलो बाइक ढूढते है... मतलब हमेशा कि तरह ढूँढनी नहीं पड़ेगी क्योकि आज मुझे पता है कि बाइक कहा है....

ये रही कटरीना कैफ ... और ये रही ..... अरे ये क्या .. बाइक तो यहाँ नहीं है... शायद किसी ने इधर उधर कर दी होगी..

५० मीटर के दायरे में घूमने के बाद.. भी नहीं मिली... ये क्या हुआ ... आज का दिन चोर का था क्या.. अरे नहीं ऐसा नहीं हो सकता... नहीं हो गयी चोरी.. एक एक गाडी का नंबर चेक कर रहे थे हम क्या करे ? मेरी नजर पत्नी कि आँखों में पड़े आंशुओ पे गए. वो बहुत भावुक है.. उस बाइक के साथ हमारी बहुत यादें जुड़ी है... मेरा भाई भी बहुत भावुक है... असल में ये मुख्यतया उसी कि है फिर हम सबकी.... पर बाइक कही नहीं है और यही सच्चाई है.. चोर महाशय सफल हो गए... और मैं रोड पे देख रहा हु कि कोई चोर मेरी बाइक ले के जा रहा होगा और मैं उसे पकड़ लूंगा... पर क्या चोर इतना बेवकूफ होगा... नहीं पर जब कुछ समझ में नहीं आता तो... हम कुछ भी करने लग जाते है... मैंने मुड़ के कैटरीना कैफ को देखा... बेचारी लाचार दिख रही है और शायद कुछ दुखी भी है 

चलो कोई बात नहीं... अब उस बाइक कि कीमत २०-३० हजार ही होगी ... पैसे कि हानि कोई हानि नहीं होती, शारीरिक हानि नहीं होनी चाहिए ... मैं ये पत्नी को समझा रहा हु और शायद खुद को भी...
और हां आज तो शनिवार है... शनिवार को लोहा जाना अच्छा होता है... क्या अचानक से मैं ये कैसे बातें कर रहा हु....

नुक्सान तो हो चूका है... अब और नुक्सान हो... चोर कोई इलीगल काम ना करे और एविडेंस के तौर पे बाइक छोड़ दे.. मतलब बाइक गयी तो गई... पुलिस रिपोर्ट करना जरूरी है...चलो पुलिस स्टेशन चलते है मगर पत्नी साथ में है ... इसे नहीं ले जाऊँगा.. चलो पापा को फोने करता हु... पर पापा पूछेंगे आस पास किसी से पूछा...? क्या जवाब दूंगा... कोई फायदा नहीं है.. लेकिन.. "अरे भाई यहाँ एक बाइक खड़ी थी ?" मैंने पूछा जैसे कि दूकान वाला बोलेगा हां सर जी ये रही मैंने जेब में रख ली थी ये लो अपनी बाइक... बड़े लोग भी ना कैसे सोचते है ... मैं सोच ही रहा था तभी सामने से आवाज आई "साहब एक बाइक ट्राफिक पुलिस वाले ली गए है... यातायात पोलिस के पास जा के देख लो"
मिनट के अंदर हम रिक्शा पर सवार थे... शायद हमारी बाइक मिल जायेगी...

लो गया यातायात पुलिस थाना... जब तक मैं रिक्शा वाले को पैसे दूं.... मेरी पत्नी ने अपनी गाडी ढूंढ ली... या देख ली या मेरी बाइक ने हमें देख लिया .... पास ही 2 पोलिस वाले अलाव जला के बैठे है... उन्होंने बोला तुम तो पढ़े लिखे लगते हो .. फिर नो पार्किंग में गाडी क्यों खड़ी करते हो... 
सच कह रहा हु... पहली बार पोलिस वाले इतने क्यूट लग रहे थे... मैंने चालान भरा...(ख़ुशी ख़ुशी)... हम तीनो बहुत खुश थे... मैं मेरी पत्नी और वो (हमारी प्यारी बाइक).... 

हम वापस घर जा रहे है .... आते समय से कही ज्यादा खुश....