Content

Thursday, September 13, 2018

1042 - Secret Origins

Problem Link

15 =     1111 (Binary)
23 =   10111 (Binary)
27 =   11011 (Binary)
29 =   11101 (Binary)
30 =   11110 (Binary)
39 = 100111 (Binary)

এখানে, 15  এর Onoroy value 23 , 23 এর Onoroy value 27  ,  27 এর Onoroy value 29 ,  29 এর 30 ,  30 এর  39 , ...
এখানে Decimal Number দেখে কোনো pattern পাওয়া যায় না, কিন্তু Binary Number খেয়াল করলে একটা pattern খুজে পাওয়া যায়। এখানে Binary Number কে দুই ভাগে ভাগ করে result বের করতে হবে। বামদিকে 1 বাড়িয়ে সংখ্যাটিকে বর্তমান সংখ্যার চাইতে বড় করতে হবে এবং ডান দিকের 1 বাড়িয়ে পরের সংখ্যার চাইতে ছোট রাখতে হবে। লিঙ্কটি দেখলে বেপারটা আরো ক্লিয়ার হবে।


My Solution:


#include<bits/stdc++.h>
using namespace std;

int main()
{
    int T;
    long long N, lowestBit, leftBits, changedBits, rightBits;
    cin>>T;
    for(int t = 1; t <= T; t++)
    {
        cin>>N;
        lowestBit = N & -N;
        leftBits = N + lowestBit;
        changedBits = N ^ leftBits;
        rightBits = (changedBits / lowestBit) >> 2;
        N = leftBits | rightBits;
        cout<<"Case "<<t<<": "<<N<<endl;
    }

    return 0;
}

No comments:

Post a Comment