Content

Sunday, October 21, 2018

Appy and Balloons

Problem Link

প্রব্লেম খুব পরিষ্কারভাবে বর্ণনা করা আছে,তাই এর বর্ণনা আর না দেই। আমরা প্রথমে একটা সংখ্যা ধরে নিব যা minimum value of maximum candy কে প্রকাশ করবে।
ধরি , সংখ্যাটি ২০। তাহলে আমরা ক্রমান্বয়ে হিসেব করে দেখলে ৫ম দিনে ২৫টা candy দিতে হবে যদি একটাও balloon দিতে না পারি। কিন্তু আমার কাছে ২০ টা candy আছে তাই আমি ২০ টা candy দিব এবং একটা balloon দিব। এখন আরেকটা জিনিস খেয়াল করতে হবে আমার কাছে balloon আছে কয়টা (?)। balloon বেশি থাকলে আমি candy এর সংখ্যা আরো কমাতে পারি। তাই এখন সংখ্যাটি আরো কমিয়ে দেখবো result কত আসে...
সুতরাং বুঝাই যাচ্ছে এটা Binary Search এর প্রব্লেম। এখন এটা করতে আর বেশি সময় লাগার কথা নয়। :)


My Code:

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m, A[1000005], B[1000005];
ll MAX = 1e18;

ll check(ll mid)//mid সংখ্যক candy এর জন্য কয়টা balloon লাগে তা check করার function
{
    ll total_balloons = 0, balloons;
    for(int i = 0; i < n; i++)
    {
        balloons = mid / B[i];
        total_balloons += A[i] - min(balloons, A[i]);
    }
    return total_balloons;
}

ll BS()
{
    ll low = 0, high = MAX;
    ll mid, ans;

    while(low<=high)
    {
        mid = low+(high-low)/2;

        if(check(mid)>m)  //balloon বেশি হলে candy এর সংখ্যা increase করব।
            low = mid + 1;
        else
        {
            ans = mid;
            high = mid - 1;
        }
    }

    return ans;
}

int main()
{
    cin>>n>>m;
    for(int i = 0; i < n; i++)
        cin>>A[i];
    for(int i = 0; i < n; i++)
        cin>>B[i];
    ll ans = BS();
    cout<<ans<<endl;

    return 0;
}

No comments:

Post a Comment