Sunday, August 20, 2017

318A. Even Odds Codeforces Problem Solution In (C++,C#) & Logic

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

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

এটা কিন্তু , খুব সহজেই লুপ খাটিয়েই করা যায় -- কিন্তু , আমাদের তো একটু বুদ্ধি খাটাতেই হবে তাই না ?? না হলে , টাইম লিমিট খেয়ে যেতে পারি ।

এখন যদি দেয়া থাকে , জোড় সংখ্যা  (  যেমন, ১০  )  । । তাহলে , আমাদের লিস্ট'টা হবে -  এরকম , ( ১   ৩    ৫    ৭     ৯    ২    ৪    ৬     ৮    ১০ ) ।। এখন যদি ,  k এর মান  দেয়া থাকে ৩ তাহলে , আমাদের উত্তর হবে ৫ , যদি ,  k এর মান  দেয়া থাকে ৬ তাহলে , আমাদের উত্তর হবে ২ । ।

এখন , এখানে - আমরা যদি দেয়া মান ১০ এর  অর্ধেক , একটা ভ্যারিয়েবলে - রাখি , যেমন - int part = n / 2 = 10 / 2 = 5 ; এখন যদি বলে  ,  ( k = 4 ) তম  মান  কতো  ???  তাহলে , কি করা যায় ??    2*k-1 = 7
আসে , তাই না /? ???       হুম , কিন্তু যখন বলবে ,  ( k = 6)  তখন কি করবে ??  2*k-1 = 11 বের করবে ???    তাহলে তো হচ্ছে না   ,কি করা যায় ??? হুম , (k-part)*2 = ২ হবে , আসল উত্তর ।

যাই হোক , বিজোড় থাকলে - part নেবার সময় একটু ঝামেলা আছে , তাছাড়া আর সমস্যা নাই । সবকিছুই এক ---লজিক , চলো এবার কোড দেখে আসি ------------

IN C++ Language..................................

#include <bits/stdc++.h>

using namespace std;

int main()
{
    long long n,k,part,output;
   
    cin>>n>>k;

    if(n%2==0)
    {
        part=n/2;
    }
    else
    {
        part=(n/2)+1;
    }

    if(k<=part)
    {
        output=(2*k)-1;
    }
    else
    {
        output=(k-part)*2;
    }

    cout<<output<<endl;



    return 0;
}


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

using System; 

 class Exercise11 


   
   
     static void Main()
   
   {

     long part,output;
     string s=Console.ReadLine();
     string[] values=s.Split(' ');
     long n=long.Parse(values[0]);
     long k=long.Parse(values[1]);

    if(n%2==0)
    {
        part=n/2;
    }
    else
    {
        part=(n/2)+1;
    }

    if(k<=part)
    {
        output=(2*k)-1;
    }
    else
    {
        output=(k-part)*2;
    }

    Console.WriteLine(output);

   }

} 

3 comments: