Content

Wednesday, September 12, 2018

1008 - Fibsieve`s Fantabulous Birthday

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;
}

No comments:

Post a Comment