http://www.spoj.com/problems/ATOMS/
খুবই সহজ একটি প্রোবলেম , তোমায় বলা আছে যে - একটা Atomic Research Centre - এ N সংখ্যক
Atom আছে , যেটা ১ সেকেন্ড পর পর K সংখ্যক টুকরোতে পরিনত হয় । এখন , লক্ষ রাখতে হবে , মোট Atom এর টুকরোর পরিমাণ যেনো , M ছাড়িয়ে না যায় । তাহলে , টুকরোর পরিমাণ ১ সেকেন্ড পর পর K গুণ করে বাড়তে থাকবে , যে পর্যন্ত না M ছাড়িয়ে যায় । তারপর , কয় সেকেন্ড লাগলো ??
সেটাই হবে , আমাদের উত্তর ।
কিন্তু , সমস্যা হলো - K ,N, M এর মান অনেক বেশী বড়ো রেঞ্জ এর হবে
K ,N, M <= 10^18
সেই জন্য , আমাদের N=N*K করে , বাড়িয়ে M অবদি চেক করার চেয়ে ,
S=1 , ধরে - S=S*K; করে , বাড়িয়ে M/N অবদি চেক করতে হবে - তাহলে , কিন্তু একই কাজই করা হবে এবং Overflow হবে না । কারণ, S=S*K করে বাড়ানোর কারনে , গুনফল আগের পদ্ধতি N=N*K
করে বাড়ালে , যে গুনফল হতো - তার চেয়ে N গুণ কম হবে । আর , সেই জন্যই আমাদের লিমিটেশনও
M কে N দিয়ে ভাগ দিয়ে কমিয়ে M/N করে নিয়েছি । ঘুরেফিরে , একই কাজ করেছি - যেনো , মেমোরি'তে Overflow না হয় । চলো , কোড দেখি -------
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int p;
scanf("%d",&p);
while(p--)
{
unsigned long long int n,k,m,s=1,t=0;
scanf("%llu%llu%llu",&n,&k,&m);
if(n>m)
printf("0\n");
else
{
while(s<=m/n)
{
s=s*k;
if(s<=m/n)
{
t++;
}
}
printf("%llu\n",t);
}
}
return 0;
}
খুবই সহজ একটি প্রোবলেম , তোমায় বলা আছে যে - একটা Atomic Research Centre - এ N সংখ্যক
Atom আছে , যেটা ১ সেকেন্ড পর পর K সংখ্যক টুকরোতে পরিনত হয় । এখন , লক্ষ রাখতে হবে , মোট Atom এর টুকরোর পরিমাণ যেনো , M ছাড়িয়ে না যায় । তাহলে , টুকরোর পরিমাণ ১ সেকেন্ড পর পর K গুণ করে বাড়তে থাকবে , যে পর্যন্ত না M ছাড়িয়ে যায় । তারপর , কয় সেকেন্ড লাগলো ??
সেটাই হবে , আমাদের উত্তর ।
কিন্তু , সমস্যা হলো - K ,N, M এর মান অনেক বেশী বড়ো রেঞ্জ এর হবে
K ,N, M <= 10^18
সেই জন্য , আমাদের N=N*K করে , বাড়িয়ে M অবদি চেক করার চেয়ে ,
S=1 , ধরে - S=S*K; করে , বাড়িয়ে M/N অবদি চেক করতে হবে - তাহলে , কিন্তু একই কাজই করা হবে এবং Overflow হবে না । কারণ, S=S*K করে বাড়ানোর কারনে , গুনফল আগের পদ্ধতি N=N*K
করে বাড়ালে , যে গুনফল হতো - তার চেয়ে N গুণ কম হবে । আর , সেই জন্যই আমাদের লিমিটেশনও
M কে N দিয়ে ভাগ দিয়ে কমিয়ে M/N করে নিয়েছি । ঘুরেফিরে , একই কাজ করেছি - যেনো , মেমোরি'তে Overflow না হয় । চলো , কোড দেখি -------
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int p;
scanf("%d",&p);
while(p--)
{
unsigned long long int n,k,m,s=1,t=0;
scanf("%llu%llu%llu",&n,&k,&m);
if(n>m)
printf("0\n");
else
{
while(s<=m/n)
{
s=s*k;
if(s<=m/n)
{
t++;
}
}
printf("%llu\n",t);
}
}
return 0;
}
No comments:
Post a Comment