Monday, 2 February 2015

Binary Search Tree Implementation

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank / uva / uvalive), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

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

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010

struct BST{
    int data;
    struct BST *left, *right;
}node;

BST *getNewNode()
{
    BST *tmp;
    tmp=(BST *) malloc(sizeof(BST));
    tmp->left=NULL;
    tmp->right=NULL;
return tmp;
}

void insertNode(BST *root, BST *newNode)
{
    //cout<<root->data<<endl;
    if(newNode->data < root->data)
    {
        if(root->left == NULL) root->left=newNode;
        else insertNode(root->left, newNode);
    }
    else
    {
        if(root->right == NULL) root->right=newNode;
        else insertNode(root->right, newNode);
    }
return;
}

void preOrder(BST *root)
{
    cout<<root->data<<" ";
    if(root->left !=NULL) preOrder(root->left);
    if(root->right !=NULL) preOrder(root->right);
return;
}

void inOrder(BST *root)
{
    if(root->left !=NULL) inOrder(root->left);
    cout<<root->data<<" ";
    if(root->right !=NULL) inOrder(root->right);
return;
}

void postOrder(BST *root)
{
    if(root->left !=NULL) postOrder(root->left);
    if(root->right !=NULL) postOrder(root->right);
    cout<<root->data<<" ";
return;
}

BST *searchBST(BST *root, int key)
{
    while(root!=NULL)
    {
        //cout<<root->data<<endl;
        if(root->data == key) return root;
        else if(key < root->data)
        {
            if(root->left != NULL)
                root=root->left;
            else return NULL;
        }
        else if(key > root->data)
        {
            if(root->right !=NULL)
                root = root->right;
            else return NULL;
        }
    }
return NULL;
}

int main()
{
    BST *root, *newNode;
    root = NULL;
    for(int i=0;i<6;i++)
    {
        newNode = getNewNode();
        cin>>newNode->data;
        if(root==NULL) root=newNode; //BST is not initialized.
        else insertNode(root, newNode);
    }
    preOrder(root);
    cout<<"\n";
    inOrder(root);
    cout<<"\n";
    postOrder(root);
    cout<<"\n";

    int searchElement;
    cin>>searchElement;
    //cout<<searchElement<<endl;
    if(searchBST(root, searchElement)==NULL) cout<<"Not found\n";
    else cout<<"found\n";

return 0;
}
/*
5 4 6 3 7 2
9
*/

Sunday, 1 February 2015

Codeforces Round #288, Anton and currency you all know

Problem: Anton and currency you all know

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

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

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010


int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int tc,kk=1, n;
    string s;
    cin>>s;
    int st=-1;
    int sl=s.size();
    for(int i=0;i<sl-1;i++)
        if((s[i]-'0')%2==0 && (s[sl-1]-'0')>(s[i]-'0'))
        {
            swap(s[i], s[sl-1]);
            st=i;
            break;
        }
    if(st==-1)
    {
        for(int i=sl-2;i>=0;i--)
            if((s[i]-'0')%2==0 && s[i]!=s[sl-1])
            {
                swap(s[i], s[sl-1]);
                st=i;
                break;
            }
    }

    if(st==-1) cout<<"-1\n";
    else cout<<s<<"\n";
    return 0;
}

Codeforces Round #289, Painting Pebbles

Problem: Painting Pebbles

///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

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

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010


int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int tc,kk=1, n, k, arr[105];
    cin>>n>>k;
    for(int i=0;i<n;i++) cin>>arr[i];
    vector<int>adj[105];
    for(int i=1;i<=k;i++)
    {
        int mn=105;
        for(int j=0;j<n;j++)
            mn=min(mn, arr[j]);
        for(int j=0;j<n;j++)
        {
            arr[j]-=mn;
            for(int jj=0;jj<mn;jj++)
                adj[j].push_back(i);
            if(arr[j])
            {
                adj[j].push_back(i);
                arr[j]--;
            }
        }
    }
    bool chk=true;
    for(int i=0;i<n;i++)
        if(arr[i]) chk=false;
    if(!chk) cout<<"NO\n";
    else
    {
        cout<<"YES\n";
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<adj[i].size();j++)
            {
                if(j) cout<<" ";
                cout<<adj[i][j];
            }
            cout<<"\n";
        }
    }

    return 0;
}

Codeforces Round #289, Maximum in Table


///     Raihan Ruhin
///     CSE, Jahangirnagar University.
///     Dhaka-Bangladesh.
///     id: raihanruhin (topcoder / codeforces / codechef / hackerrank), 3235 (lightoj)
///     mail: raihanruhin@ (yahoo / gmail / facebook)
///     blog: ruhinraihan.blogspot.com

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

#define SET(a) memset(a,-1,sizeof(a))
#define CLR(a) memset(a,0,sizeof(a))
#define PI acos(-1.0)

#define MOD 1000000007
#define MX 100010


int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int tc,kk=1, n, arr[15][15];
    cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if(!i || !j) arr[i][j]=1;
            else arr[i][j]=arr[i][j-1]+arr[i-1][j];
        }
    cout<<arr[n-1][n-1]<<"\n";
    return 0;
}

Wednesday, 7 January 2015

সহজ উপায়ে সি প্রোগ্রামিং শিখি

আজকের লেখাটা একদম পিচ্চিদের জন্য, যারা প্রোগ্রামিং শিখতে চায়, কিন্তু কিভাবে শুরু করবে সেটা জানেনা। কিন্তু প্রোগ্রামিং শেখাতো আর চাট্টিখানি কথা না। আমি শুরুর আগে তোমাদের কিছু কঠিন কঠিন কাজ করতে দিবো। যারা কঠিন কঠিন কাজগুলো করতে পারবে, আমি শুধুমাত্র তাদেরকেই শেখাবো, বাকিরা যদি শিখতে চাও তাহলে আগে কারো কাছ থেকে কাজগুলো শিখে নাও।

কঠিন কঠিন কাজগুলো হলোঃ 
  1. কম্পিউটার কিভাবে অন আর অফ করতে হয় সেটা জানতে হবে। পারলে এখন অফ করে দেখাওতো... না পারলে শিখে নাও। 
  2. কিভাবে গুগলে কিছু সার্চ করতে হয় সেটাও জানতে হবে, পারলে এখনি বের করে দেখাওতো বুলগেরিয়ার রাজধানীর নাম কি? তোমার উত্তর যদি সোফিয়া না হয়ে মাফিয়া হয় তাহলে কিন্তু আমি তোমাকে প্রোগ্রামিং শেখাবোনা। 
  3.  ১৭ এর সাথে ১৫ যোগ করলে কতো হয়? ৪২ হলে কিন্তু উত্তর ভুল। না পারলে একটু সাহায্য করি, সংখ্যাটা ৩১ এর ৩৩ এর মাঝামাঝি কোন একটা সংখ্যা। এবারও যদি ভুল করো তাহলে আমি তোমাকে প্রোগ্রামিং শেখাবই না, বলে রাখলাম, হু...
উপরের কাজগুলা যদি তুমি শিখে থাকো তাহলে তুমি প্রোগ্রামিং শেখার জন্য প্রস্তুত। 

তাহলে শুরু করা যাক। 
প্রোগ্রামিং শুরু করলে হলে সবার আগে একটা প্রোগ্রামিং ভাষা জানতে হয়। ভয় পেওনা, এটা চাইনিজ ভাষার মত না যে শিখতে গিয়ে তোমার দাঁত ভেঙ্গে যাবে। এটা হলো সি ল্যাঙ্গুয়েজ।  

আচ্ছা থাক, আজকে অনেক আলসেমি লাগতেছে, আজকে কিছুই শিখবোনা, আজকে শুধু একটা সফটওয়্যার ইন্সটল করবো। কোড লিখতে হলেতো মাইক্রোসফট ওয়ার্ড বা নোটপ্যাডের মতো একটা কিছু লাগবে, তাইনা? হোম ওয়ার্কের খাতায় কোড লিখলে পরে আবার টিচার বকা দিতে পারে। 
সফটওয়্যারটার নাম হলো Code::Blocks, তাহলে এর দেরি কেনো? 


উপরের লিঙ্কে গিয়ে ডাউনলোড করে ফেলো। 

ইন্সটল কি নিজে নিজে দিতে পারবা? নাকি আমি দেখিয়ে দিবো?
আচ্ছা, আমি step by step ছবিসহ দেখিয়ে দিচ্ছি। 

Step1: 
যে সফটওয়্যার টা ডাউনলোড করছো সেটাতে ডাবল ক্লিক দাও, 


Step2: 
"Next" এ ক্লিক দাও

 Step3:
"I Agree" তে ক্লিক দাও

Step4:
এবারও "Next" এ ক্লিক দাও

Step5:
এবার "Install" এ ক্লিক দাও

Step6:
এবার কিছু করা লাগবেনা, শুধু বসে বসে দেখো এরকম আসে কিনা

Step7:
এরকম একটা উইন্ডো আসলে "Yes" এ ক্লিক দিও

Step8:
এবার যদি এই উইন্ডোটা আসে তাইলে বুঝবা তুমি ঠিক পথেই এগুচ্ছো, এই উইন্ডোটা ক্লোজ করে দাও 

Step9:
আগের উইন্ডোটা Installation Complete দেখাবে, "Next" এ ক্লিক দাও

Step10:
"Finish" এ ক্লিক দাও

ব্যাস, তোমার কাজ শেষ। হয়ে গেলো তোমার প্রোগ্রামিং এর সফটওয়্যার ইন্সটল দেয়া। ডেস্কটপে দেখো এই সফটওয়্যারের একটা আইকন চলে আসছে, তোমার যখনই কোড লিখতে মন চাইবে তখনই ওই আইকনে ডাবল ক্লিক দিলেই হবে।

পরবর্তী পোস্টে কোড বা প্রোগ্রাম কিভাবে লিখতে হয় সেটা দেখিয়ে দিবো।