Wednesday, July 12, 2017

10783 - Odd Sum Uva Problem Solution & Logic

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1724

 প্রোবলেম'টি যে কেউ সলভ করতে পারবে , কিন্তু - এখানেও অনেকভাবেই , প্রোবলেম এর উত্তর এফিশিয়েন্ট করা যায় । যেহেতু , এফিসিয়েন্ট করার সুযোগ আছে , সেহেতু - আমি , লুপ খাটিয়ে করার পক্ষপাতি নই । এইসব ছোটখাট প্রোবলেম যদি , এফিসিয়েন্ট করে করা শুরু করি , এখন থেকেই - তাহলে বড় বড় প্রোবলেম এর ক্ষেত্রে সুবিধা হবে ।

যদি কখনো বলে , প্রথম ২/৩/৪ টি বিজোড় সংখ্যার যোগফল বের করো । তাহলে, কি হতে পারে ?? হাতে কলমে দেখি , চলো

   ১+৩=৪       ,      ১+৩+৫=৯             , ১+৩+৫+৭=১৬           ,১+৩+৫+৭+৯=২৫

            কি? বুঝা যায় ?? হুম, যোগফল গুলো অলটাইম ততগুলো বিজোড় সংখ্যার বর্গ হয়  ।
            তাহলে , প্রশ্ন অনুযায়ী - আমাকে ২ টি সংখ্যা দিবে --- a & b  এদের মাঝে যতগুলো বিজোড়
আছে , তাদের যোগফল বের করতে হবে ।

তাহলে , প্রথমে ১ থেকে b অবদি মোট কয়টা বিজোড় সংখ্যা আছে ?? সেটা -- ২ দিয়ে ভাগ দিলেই পাবো , তারপর যে কয়টা বিজোড় সংখ্যা আছে তাকে বর্গ করলেই
১ থেকে b অবদি সবগুলোর যোগফল বের হয়ে যাবে । এখন ১ থেকে a এর আগ  অবদি, বিজোড়্গুলোর
যোগফল বের করবো --    


                       এখন,     ১ থেকে b  এর যোগফল থেকে , ১ থেকে a এর আগ  অবদি, বিজোড়্গুলোর
                    যোগফল বাদ দিলেই  , আমরা ------- a থেকে b অবদি যতগুলি বিজোড় আছে  তাদের  
                                                                      যোগফল পাবো । চলো কোড দেখি ,


#include<bits/stdc++.h>


// Nayeem Mollick Joy , Applied Physics & Electronic Engineering , University of Rajshahi.

using namespace std;

int main()
{
    int T,a,b,b1;
    cin>>T;
    for(int i=1;i<=T;i++)
    {
        cin>>a>>b;
        if(b%2!=0)
        {
             b1=(b>>1)+1;
        }
        else{
             b1=(b>>1);
        }

        int B=b1*b1;
        int A=(a>>1)*(a>>1);
        cout<<"Case "<<i<<": "<<B-A<<endl;
    }
    return 0;
}

                            






No comments:

Post a Comment