Just another WordPress.com site

সমস্যা :

প্রশ্নবোধক চিহ্নের পরিবর্তে তুমি শুধুমাত্র  + অথবা – ব্যবহার করতে পারবে। এরপর তোমাকে এমন Integer k একটি খুঁজে বের করতে হবে যাতে নিন্মের সমীকরণটি সত্য হয়।

? 1 ? 2 ? … ? n = k

যেমন ধর, তুমি যদি 12 পেতে চাও তবে তা তুমি নিন্মানুযায়ী পেতে পার।

– 1 + 2 + 3 + 4 + 5 + 6 – 7 = 12

এখানে দেখ ১২ পেতে তোমাকে সবোর্চ্চ  ৭টি সংখ্যা ব্যবহার করতে হয়েছে। কাজেই n=7 .

The Input

প্রথমে তোমাকে একটি Integer দেয়া হবে যা নির্দেশ করবে number of test cases, followed by a blank line. এরপরে প্রত্যেকটি test case এ একটি করে Integer k দেয়া থাকবে। যার সীমা হল (0<=|k|<=1000000000).

The Output

প্রত্যেকটি test case এর জন্য তোমাকে  Output হিসেবে দেখাতে হবে একটি Integer n .GwU নির্দেশ করে  সর্বনিন্ম কয়টি সংখ্যা ব্যবহার করে তুমি k পেতে পার।

Print a blank line between the outputs for two consecutive test cases.

Sample Input

2

12

-3646397

Sample Output

7

2701

লজিক প্রক্রিয়া :

১.তোমাকে যে integer k টি দেয়া হবে তা খুব বড় হতে পারে। কাজেই K এর decleration টি খুব ভালোভাবে লক্ষ্য কর। long long k

২. k যদি negative হয় ,তবে তাকে positive করে নাও। এই লাইনটি সে কাজ করছে। k = k < 0 ? k * -1: k;

৩. তুমি যদি k পেতে চাও তবে n এর মান অবশ্যই 2k এর  square root হতে শুরূ করতে হবে। এই লাইনটি সে কাজ করছে।

n = sqrt (k * 2);

এই লাইনটি সবচেয়ে গুরূত্বপূর্ণ। মনোযোগ দিয়ে দেখ এবং বোঝার চেষ্টা কর।

যেমন : আমাদের উপরের উদাহরণের জন্য n এর মান শুরূ করতে হবে  sqrt (k * 2)= sqrt (12* 2)= sqrt (24)=4 হতে।

৪.  এরপরের লজিকের জন্য তোমাকে আগে দেখতে হবে k সংখ্যাটি কী জোড় নাকি বিজোড়। আমি এখানে শুধু জোড় সংখ্যার জন্য দেখাব। বিজোড় সংখ্যার দ্বায়িত্ব তোমারই রইল।

৫. একটি variable নাও যা প্রথম n সংখ্যার যোগফল জমা করে রাখবে। res = (n * (n + 1)) / 2;

৬.  এখন একটি লুপ চালিয়ে n এর প্রকৃত মান বের কর।

while ( res < k || res % 2 == 1 )  {

n++;

res = (n * (n + 1)) / 2;   }

৭. এখন তুমি নিজে একটা উদাহরণের মাধ্যমে এই লুপটিকে বুজার চেষ্টা কর। না পারলে তো আমি আছি-ই।

অনেক বকবকানি হয়েছে। এবার মনে হয় সময় এসেছে তোমাদের নিজেদের চিন্তার সুযোগ দেয়ার। তোমরা তা করতে থাক , code টি লেখ , Submit কর। আর এই ফাঁকে আমিও একটু ঘুরে আসি। ভালো থেকো সবসময়। খোদা হাফেজ। দেখা হবে বিজয়ে ।

বুকে সাহস রেখে বন্ধু এবার

অবাক বাংলাদেশকে দেখিয়ে দাও,

ACM এর রাজত্বে তোমার স্থান

এবার তুমি নিজেই বুঝে নাও।

 

CODE::::::::::::::::::::::::::::::::::::::::::::😀

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

#define LL long long

int main() {
int testCase;
scanf (“%d”, &testCase);
bool blank = false;

while ( testCase– ) {
LL k;
cin >> k;

k = k < 0 ? k * -1: k;

LL n = (LL) sqrt (k * 2);

if ( k % 2 == 1 )
{
LL res = (n * (n + 1)) / 2;
while ( res < k || res % 2 == 0 )
{
n++;
res = (n * (n + 1)) / 2;
}
}
else
{
LL res = (n * (n + 1)) / 2;
while ( res < k || res % 2 == 1 )
{
n++;
res = (n * (n + 1)) / 2;
}
}

if ( blank )
printf (“\n”);
blank = true;

n = k == 0 ? 3 : n;
cout << n << endl;
}

return 0;
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: