Problem Link
বাইসেকশন মেথড ব্যবহার করে খুব সহজেই এর সমাধান করা যাবে। ০ থেকে ১০^৯ পর্যন্ত চেক করলেই আন্সার পাওয়া যায়।
My Solution in C++:
#include<bits/stdc++.h>
using namespace std;
long long check(long long x)
{
long long n = 0;
while(x)
{
n += x/5;
x = x/5;
}
return n;
}
long long BS(long long x)
{
long long left = 0, right = 10000000000, mid, ans = 0;
while(right>=left)
{
mid = (left+right) >> 1;
if(check(mid) >= x)
{
if(check(mid)==x)
ans = mid;
right = mid - 1;
}
else
left = mid + 1;
}
return ans;
}
int main()
{
int T,t;
long long Q;
cin>>T;
for(t = 1; t <= T; t++)
{
cin>>Q;
if(BS(Q)!=0)
cout<<"Case "<<t<<": "<<BS(Q)<<endl;
else
cout<<"Case "<<t<<": impossible"<<endl;
}
return 0;
}
বাইসেকশন মেথড ব্যবহার করে খুব সহজেই এর সমাধান করা যাবে। ০ থেকে ১০^৯ পর্যন্ত চেক করলেই আন্সার পাওয়া যায়।
My Solution in C++:
#include<bits/stdc++.h>
using namespace std;
long long check(long long x)
{
long long n = 0;
while(x)
{
n += x/5;
x = x/5;
}
return n;
}
long long BS(long long x)
{
long long left = 0, right = 10000000000, mid, ans = 0;
while(right>=left)
{
mid = (left+right) >> 1;
if(check(mid) >= x)
{
if(check(mid)==x)
ans = mid;
right = mid - 1;
}
else
left = mid + 1;
}
return ans;
}
int main()
{
int T,t;
long long Q;
cin>>T;
for(t = 1; t <= T; t++)
{
cin>>Q;
if(BS(Q)!=0)
cout<<"Case "<<t<<": "<<BS(Q)<<endl;
else
cout<<"Case "<<t<<": impossible"<<endl;
}
return 0;
}
No comments:
Post a Comment