Monday, August 21, 2017

598 A. Tricky Sum Codeforces Problem Solution In (C++,C#) & Logic

http://codeforces.com/problemset/problem/598/A

খুবই মজার একটা সমস্যা । । তোমায় একটা সংখ্যা দেয়া থাকবে , তোমায় ১ থেকে সেই অবদি সংখ্যাগুলির যোগফল বের করতে হবে , বাট একটু ঝামেলা আছে এই যে - যে সংখ্যাগুলি , ২ এর উপরে পাওয়ার দিয়ে প্রকাশ করা সম্ভব হয় , সেইগুলো'র  আগে মাইনাস চিহ্ন থাকবে , যেমন ১, ২, ৪, ৮......ইত্যাদি     । ।  তাহলে ধরো , তোমায় বলা হলো , N=5 | |

তাইলে , ধারাটি কেমন হবে ??   -  1 - 2 + 3 -   এখন 4 + 5,এটা চাইলেই লুপ খাটিয়ে করা যায় , কিন্তু । আমরা একটু সহজ / শরটকারট পদ্ধতি পাই কি না ??  ধরো ধারাটি যদি এমন হতো সবগুলো প্লাস তাহলে ,                           +1 + 2 +3 + 4 + 5    = 15

                                       -  1 - 2 + 3 - 4 + 5     = 1

এখন  এখানে ,  প্রথম'টার যোগফল সেকেন্ড'টার চেয়ে ১৪ বেশী । এই ১৪ টা বেশী হলো , কোথায় ??? চলো - খতিয়ে দেখি ।       -1 >  +1   , 2   বেশী
                                        -2 > +2    , 4   বেশী
                                        -4 > +4     ,8   বেশী
                                -------------------------------
                                                         ১৪ বেশী

তাহলে , আমরা - যদি , N=5 এর জন্য , যোগফল বের করি , ( n*(n+1) ) /2  = ১৫ , তারপর যেহেতু , ২ সবসময় বেশী থাকবেই , তাই - সেটা আগে বিয়োগ করে নিবো , তারপর একটা লুপ খাটিয়ে ৪ ও ৮ বিয়োগ করবো । । আমাদের উত্তর'টা পেয়ে যাবো   ,  তাহলেই আমাদের সময় খুবই কম লাগবে । চলো , কোড দেখি ফেলি একবার , একটু চিন্তা করলেই সবকিছু পানির মতো ক্লিয়ার হয়ে যাবে , তাই চিন্তা করতে শেখো ---

IN C++ LANGUAGE.........................................


#include<bits/stdc++.h>

using namespace std;

int main()

{
   
    int t;
   
    cin>>t;
   
    while(t--)
       
    {
        __int64 n,i;
   
        cin>>n;
       
         __int64 ans=((n+1)*n)/2-2;
        
        for( int i=1;pow(2,i)<=n;i++)
           
        {
           
        ans = ans - pow(2,i+1);
       
        }
       
        cout<<ans<<endl;
    }
   
    return 0;
}



IN C# LANGUAGE...................................


using System; 

 class Exercise11 


  
  
     static void Main()
   
   {
  
    int t=Convert.ToInt32(Console.ReadLine());
  
    for(int j=0;j<t;j++)
      
    {
  
        long n=Convert.ToInt64(Console.ReadLine());
      
         long ans=((n+1)*n)/2-2;
       
        for( int i=1;(long)Math.Pow(2,i)<=n;i++)
          
        {
          
        ans = ans -(long) Math.Pow(2,i+1);
      
        }
      
        Console.WriteLine(ans);
    }
   
   }

}















No comments:

Post a Comment