Problem Link
ভালমত দুইটি জিনিস খেয়াল করতে হবে -
১) সংখ্যাগুলো একটা বর্গের ছাঁচ তৈরী করে।
২) জোড় এবং বিজোড় বর্গ সংখ্যাগুলা বিপরীতক্রমে সাজানো থাকে তাই তাদের হিসেব করার শর্তও বিপরীত হবে।
তো এখন শুধু কাজটা হবে ছাঁচটা খুজে বের করা। :p
My Solution:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int T;
ll s, mid, p, q, p1, q1;
cin>>T;
for(int t = 1; t <= T; t++)
{
cin>>s;
p = ceil(sqrt(s));
q = p - 1;
p1 = p*p;
q1 = q*q;
mid = (p1+q1+1)/2;
if(p%2)
{
if(s==mid)
cout<<"Case "<<t<<": "<<p<<" "<<p<<endl;
else if(s>mid)
{
cout<<"Case "<<t<<": "<<p1-s+1<<" "<<p<<endl;
}
else if(s<mid)
{
cout<<"Case "<<t<<": "<<p<<" "<<s-q1<<endl;
}
}
else
{
if(s==mid)
cout<<"Case "<<t<<": "<<p<<" "<<p<<endl;
else if(s>mid)
{
cout<<"Case "<<t<<": "<<p<<" "<<p1-s+1<<endl;
}
else if(s<mid)
{
cout<<"Case "<<t<<": "<<s-q1<<" "<<p<<endl;
}
}
}
return 0;
}
ভালমত দুইটি জিনিস খেয়াল করতে হবে -
১) সংখ্যাগুলো একটা বর্গের ছাঁচ তৈরী করে।
২) জোড় এবং বিজোড় বর্গ সংখ্যাগুলা বিপরীতক্রমে সাজানো থাকে তাই তাদের হিসেব করার শর্তও বিপরীত হবে।
তো এখন শুধু কাজটা হবে ছাঁচটা খুজে বের করা। :p
My Solution:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int T;
ll s, mid, p, q, p1, q1;
cin>>T;
for(int t = 1; t <= T; t++)
{
cin>>s;
p = ceil(sqrt(s));
q = p - 1;
p1 = p*p;
q1 = q*q;
mid = (p1+q1+1)/2;
if(p%2)
{
if(s==mid)
cout<<"Case "<<t<<": "<<p<<" "<<p<<endl;
else if(s>mid)
{
cout<<"Case "<<t<<": "<<p1-s+1<<" "<<p<<endl;
}
else if(s<mid)
{
cout<<"Case "<<t<<": "<<p<<" "<<s-q1<<endl;
}
}
else
{
if(s==mid)
cout<<"Case "<<t<<": "<<p<<" "<<p<<endl;
else if(s>mid)
{
cout<<"Case "<<t<<": "<<p<<" "<<p1-s+1<<endl;
}
else if(s<mid)
{
cout<<"Case "<<t<<": "<<s-q1<<" "<<p<<endl;
}
}
}
return 0;
}
No comments:
Post a Comment