Responsive Ads Here
Showing posts with label Practice. Show all posts
Showing posts with label Practice. Show all posts

Tuesday, 20 June 2017

Full program of AVL tree (insertion and deletion takes O(logn) Time)

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

struct Node
{
int data;
struct Node *left;
struct Node *right;
int height;
};

Node *newnode(int key)
    {
    Node *temp=new Node;
    temp->data=key;
    temp->left=NULL;
    temp->right=NULL;
    temp->height=1;
    return temp;
    }

int height(Node *root)//return height of Node
    {
    if(root==NULL)  return 0;;
    return root->height;
    }
Node *left_rotate(Node *root)
    {
    Node *x=root->right;
    Node *y=x->left;
    x->left=root;
    root->right=y;
    root->height=1+max(height(root->left),height(root->right));
    x->height=1+max(height(x->left),height(x->right));
    return x;
    }

Node *right_rotate(Node *root)
    {
    Node *x=root->left;
    Node *y=x->right;
    x->right=root;
    root->left=y;
    root->height=1+max(height(root->left),height(root->right));
    x->height=1+max(height(x->left),height(x->right));
    }

Node* insertToAVL( Node* root, int key)
{
if(root==NULL)  return newnode(key);
if(root->data==key) return root;
else if(root->data >key) root->left=insertToAVL(root->left,key);
else root->right=insertToAVL(root->right,key);

root->height=1+max(height(root->left),height(root->right));
int balance=height(root->left)-height(root->right);

if(balance>1 && root->left->data >key )//LL case
    {
    return right_rotate(root);
    }
 if(balance > 1 && root->left-> data <key)//LR case
    {
    root->left=left_rotate(root->left);
    return right_rotate(root);
    }
 if(balance <-1 && root->right ->data <key) //RR case
    {
    return left_rotate(root);
    }
 if(balance<-1 && root->right ->data> key)//RL case
    {
    root->right=right_rotate(root->right);
    return left_rotate(root);
    }
return root;
}
void print(Node *root)//Inorder traversal of nodes.
{
if(root==NULL) return;
cout<<root->data<<" ";
print(root->left);
print(root->right);
}
int find_min(Node *root,int key)//Find the minimum of A subtree
{
while(root->left!=NULL) root=root->left;
int temp=root->data;
root->data=key;
return temp;
}
int getfactor(Node *root){
return (height(root->left)-height(root->right));
}
Node *delete_node(Node *root,int &key)//Delete a key from the BST !.
{
if(root==NULL) return NULL;
if(root->data==key)
{
if(root->left==NULL && root->right==NULL)
return NULL;
else if(root->left==NULL && root->right!=NULL)
{
Node *temp=root->right;
return temp;
}
else if(root->left!=NULL && root->right==NULL)
{
Node *temp=root->left;
return temp;
}
else
{
int Min=find_min(root->right,key);
root->data=Min;
root->right=delete_node(root->right,key);
return root;
}
//root->height=1+root->height;
delete root;
}
else if(root->data > key) root->left=delete_node(root->left,key);
else root->right=delete_node(root->right,key);
root->height=1+max(height(root->left),height(root->right));
int balance=height(root->left)-height(root->right);
if(balance <-1 && getfactor(root->right)<0)
{
root=left_rotate(root);
}
if(balance <-1 && getfactor(root->right)>=0)
{
root->right=right_rotate(root->right);
root=left_rotate(root);
}
if(balance >1 && getfactor(root->left)>=0)
{
root=right_rotate(root);
}
if(balance >1 && getfactor(root->left)<0)
{
root->left=left_rotate(root->left);
root=right_rotate(root);
}

return root;
}
int main() {
//std::ios::sync_with_stdio(false);
Node *head=NULL;
int n,key;
do
{
sc(n);
switch(n)
{
case 1 :
sc(key);
head=insertToAVL(head,key);//Insertion in binary tree
break;
case 2 ://Print the elements of binary tree in inorder format
print(head);
pfnl();
break;
case 3://Deltetion of elements from binary tree
cin>>key;
head=delete_node(head,key);
}
}while(n!=4); //Press 4 to exit the loop
return 0;
}

Four Elements

problem id:--http://practice.geeksforgeeks.org/problems/four-elements/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int binary_loc(int arr[],int n,int sum){
int mid,l=0,r=n-1;
while(l<=r){
mid=(l+r)/2;
if(arr[mid]<sum) l=mid+1;
else r=mid-1;
}
return mid;

}

bool find_sum(int arr[],int n,int sum){
    unordered_set<int> mymap;
rep(i,n-3){
rep2(j,i+1,n-1){
   mymap.clear();
rep2(k,j+1,n){
int temp=arr[i]+arr[j]+arr[k];
if(mymap.find(-temp)!=mymap.end()) return 1;
mymap.insert(arr[k]-sum);
}
}
}

return 0;
}

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int arr[105];
int t;
sc(t);
while(t--)
{
int n,sum;
sc(n);
rep(i,n) sc(arr[i]);
sc(sum);
sort(arr,arr+n);//sorting is better than comparing in O(n^3)
//debug(binary_loc(arr,n,sum));
//we'll use binary_loc to find the upper bound upto which we have check in arrya
//that means binary_loc returns the index of an array such that
//arr[binary_loc()] val is greater than sum or equal to sum
// and we don't want to compare beyond sum value in array
bool ans=find_sum(arr,binary_loc(arr,n,sum)+1,sum);
cout<<ans;
pfnl();
}
return 0;
}

Sunday, 18 June 2017

Longest Palindromic Subsequence

problem id:--http://practice.geeksforgeeks.org/problems/longest-palindromic-subsequence/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
//#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007
int dp[1005][1005];

int palind_substr(string str)
{
int n=str.length();
rep(i,n) rep(j,n) dp[i][j]=0;
rep(i,n) dp[i][i]=1;
int l=1;
while(l<n)
{
int i=0;
while(i<n-l)
{
if(str[i]==str[i+l]) {dp[i][i+l]=2; if(l>1) dp[i][i+l]+=dp[i+1][i+l-1];}
else dp[i][i+l]=max(dp[i][i+l-1],dp[i+1][i+l]);
++i;
}
++l;
}
//rep(i,n) {rep(j,n) pf(dp[i][j]); cout<<'\n'; }
return dp[0][n-1];
}

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int t;
sc(t);
while(t--)
{
string str;
cin>>str;
int ans=palind_substr(str);
cout<<ans<<'\n';
}
return 0;
}

Minimum sum of two elements from two arrays

problem id:--http://practice.geeksforgeeks.org/problems/minimum-sum-of-two-elements-from-two-arrays/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
priority_queue<pair<int,int> > a,b;
int t;
sc(t);
while(t--)
{
int n,num;
sc(n);
a=priority_queue<pair<int,int> > ();
b=priority_queue<pair<int,int> > ();
rep(i,n) {sc(num); a.push(mp(-num,i));}
rep(i,n) {sc(num); b.push(mp(-num,i));}
int ans=0;
int num1=-a.top().X ,num2=-b.top().X;
if(a.top().Y !=b.top().Y)
   ans=num1+num2;
else
   {
   a.pop(); b.pop();
   ans=min(num1 - b.top().X , num2 - a.top().X);
   }
cout<<ans<<'\n';
}
return 0;
}

Saturday, 17 June 2017

Reverse a string with spaces intact

problem id::--http://practice.geeksforgeeks.org/problems/reverse-a-string-with-spaces-intact/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int t;
sc(t);
cin.ignore(1,'\n');
string str,ans;
while(t--)
{
getline(cin,str);
ans="";
int i=str.length()-1,j=0;
while(i>=0)
{
if(str[i]==' ') { --i; continue; }
if(str[j]==' ') { ans+=str[j]; ++j;  continue;}
ans+=str[i];
++j,--i;
}
cout<<ans;
pfnl();
}
return 0;
}

Thursday, 15 June 2017

Counting Valleys

problem id:--https://www.hackerrank.com/challenges/counting-valleys

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
map<char,int> m;
m['U']=1;
m['D']=-1;
int n;
sc(n);
int diff=0;
string str;
cin>>str;
int i=0,count=0;
while(str[i])
    {
    diff+=m[str[i]];
    if(diff==0 && str[i]=='U')
        ++count;
    ++i;
    }
pf(count);
return 0;
}

Wednesday, 14 June 2017

Sequence Equation

problem id:-https://www.hackerrank.com/challenges/permutation-equation

code:--
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include<map>
using namespace std;


int main() {
    int n,num;
    map<int,int> m;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&num);
        m.insert(make_pair(num,i));
    }
    for(auto itr=m.begin();itr!=m.end();++itr)
    {
        printf("%d \n",m[itr->second]);
    }
       
    return 0;
}

Flipping the Matrix

problem id:--https://www.hackerrank.com/challenges/flipping-the-matrix

code:--

// c++ code
#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int arr[260][260];
int q;
sc(q);
int n;
while(q--)
{
sc(n);
rep(i,2*n) rep(j,2*n) sc(arr[i][j]);
int ans=0;
rep(i,n) rep(j,n) ans+=max(arr[2*n-i-1][2*n-j-1],max(arr[i][j],max(arr[i][2*n-j-1],arr[2*n-i-1][j])));
pf(ans);
pfnl();
}
return 0;
}



//java code:-

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
int[][] arr=new int[260][260];
int q=sc.nextInt();
int n;
while(q-- >0)
{
n=sc.nextInt();
for(int i=0;i<2*n;++i)
{
for(int j=0;j<2*n;++j)
{
arr[i][j]=sc.nextInt();
}
}
int ans=0;
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
ans+=Math.max(Math.max(arr[i][j],arr[2*n-i-1][j]),Math.max(arr[i][2*n-j-1],arr[2*n-i-1][2*n-j-1]));
}
}
System.out.println(ans);
}
  }
}

Tuesday, 13 June 2017

Count of smaller elements

problem id:--http://practice.geeksforgeeks.org/problems/count-of-smaller-elements/0
code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007
int arr[100005];

int binary(int l,int r,int &x)
{
int mid;
while(l<=r)
{
mid=(l+r)/2;
if(arr[mid]<=x) l=mid+1;
else r=mid-1;
}
if(arr[mid]<=x) ++mid;
return mid;
}

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int t;
sc(t);
while(t--)
{
int n;
sc(n);
rep(i,n) sc(arr[i]);
int x;
sc(x);
int ans=binary(0,n-1,x);
pf(ans);
pfnl();
}
return 0;
}

Delete a node from BST

problem id:-http://practice.geeksforgeeks.org/problems/delete-a-node-from-bst/1


code:--



/* The structure of a BST Node is as follows:
struct Node {
  int data;
  Node * right, * left;
}; */
int min(Node *root,int &x)
    {
    if(root->left==NULL)
        {
        int temp=root->data;
        root->data=x;
        return temp;
        }
    return min(root->left,x);
    }
Node * deleteNode(Node *root,  int x)
{
if(root->data==x)
    {
    if(root->left==NULL && root->right==NULL)
        return NULL;
    else if(root->left!=NULL && root->right==NULL)
        return root->left;
    else if(root->left==NULL && root->right!=NULL)
        return root->right;
    else
        {
        root->data=min(root->right,x);
        root->right=deleteNode(root->right,x);
        return root;
        }
    }
else if(root->data >x && root->left!=NULL)
    {
    root->left=deleteNode(root->left,x);
    }
else if(root->data <x && root->right!=NULL)
    root->right=deleteNode(root->right,x);
return root;
}

Delete nodes having greater value on right

problem id:--http://practice.geeksforgeeks.org/problems/delete-nodes-having-greater-value-on-right/1


code::--

/*

The structure of linked list is the following

struct Node
{
int data;
Node* next;
};

*/
int m;
Node *ans;
void magic(Node *root)
    {
    if(root==NULL)  return ;
    magic(root->next);
    if(root->data >=m)
        {
        m=root->data;
        root->next=ans;
        ans=root;
        }
    }
Node *compute(Node *head)
{
m=0;
ans=NULL;
magic(head);
return ans;
}

Remove Duplicates from unsorted array

problem id:--http://practice.geeksforgeeks.org/problems/remove-duplicates-from-unsorted-array/0

code:--


#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int arr[105];
bool visit[105];
int t;
sc(t);

while(t--)
{
fill(visit);
int n;
sc(n);
rep(i,n) sc(arr[i]);
int j=0;
for(int i=0;i<n;)
{
if(visit[arr[i]]!=1)
{
arr[j]=arr[i];
visit[arr[i]]=1;
++j;
}
++i;
}
rep(i,j)
pf(arr[i]);
pfnl();
}

return 0;
}

Friday, 9 June 2017

Largest Number formed from an Array

problem id:--http://practice.geeksforgeeks.org/problems/largest-number-formed-from-an-array/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

bool myfun(int a,int b)  //This function is used to compare two values from the sort function
{
string str1,str2;
str1=to_string(a)+to_string(b);
str2=to_string(b)+to_string(a);
int i=0,j=0;
while(str1[i] && str2[j])
   {
   if(str1[i]==str2[j])
       {++i,++j;continue;}
   else if(str1[i]>str2[j])    return 1;
   else return 0;
   }
return 1;
}

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int t;
sc(t);
while(t--)
{
int n;
sc(n);
int arr[n];
rep(i,n) sc(arr[i]);
sort(arr,arr+n,myfun);// here we used a functor which is used to sort as per our requirment
rep(i,n) printf("%d",arr[i]);
pfnl();
}
return 0;
}

Count subsequences of type a^i b^j c^k

problem link :--http://practice.geeksforgeeks.org/problems/count-subsequences-of-type-ai-bj-ck/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

string str;

int magic()
{
int dp[4][105]={0};
rep(i,str.length()+1) dp[0][i]=1;
int i=0;
while(str[i]!='\0')
{
for(int j=1;j<=3;++j)
dp[j][i+1]=(str[i]=='`'+j)?(2*dp[j][i]+dp[j-1][i+1]):(dp[j][i]);
++i;
}
return dp[3][str.length()];
}

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int t,ans;
sc(t);
while(t--)
{
cin>>str;
ans=magic();
pf(ans);
pfnl();
}
return 0;
}

Rearrange characters

problem id::--http://practice.geeksforgeeks.org/problems/rearrange-characters/0

code:--
#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a,n)           memset(a, n, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
char str[605];
int hash[26];
int t,i,l,boundary,m,ans;
sc(t);
while(t--)
{
ans=1;
fill(hash,0);
scanf("%s",str);
l=strlen(str);
boundary=(l+1)/2;
i=0,m=0;
while(i<l)
{
++hash[str[i]-'a'];
m=max(m,hash[str[i]-'a']);
++i;
}
if(m>boundary) ans=0;
pf(ans);
pfnl();
}
return 0;
}

Find the Running Median using heap(priority queue)

problem id:--https://www.hackerrank.com/challenges/find-the-running-median
                     http://practice.geeksforgeeks.org/problems/find-median-in-a-stream/0
code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define all(v)   v.begin(),v.end()
#define      X                 first
#define      Y                 second


#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007
priority_queue<double> l,r;
int  n1,n2;
double root;
void magic()
{
if(n1!=0 && n2!=0)
{
if(root<min(l.top(),-r.top()) || root>max(l.top(),-r.top()))
{
int temp=root;
root=l.top();
l.pop();
l.push(temp);
}
}
if(n1+2==n2)
{
l.push(root);
root=-r.top();
r.pop();
--n2;
++n1;
}
else if(n1==2+n2)
{
r.push(-root);
root=l.top();
l.pop();
--n1,++n2;
}
}
int main(int argc, char **argv) {
n1=0,n2=0;
int n;
double num,temp;
cin>>n;
--n;
cin>>root;
cout<<root<<"\n";
while(n--)
{
temp=0;
cin>>num;
if(root>num){l.push(num);++n1; }
else{r.push(-num);++n2;}
magic();
if(n1==n2) {cout<<root<<"\n";continue;}
temp=(n1>n2)? l.top():-r.top();
cout<<(root+temp)/2;
cout<<endl;
}
return 0;
}

Thursday, 8 June 2017

Minimum steps to get desired array(higly optimized )

problem id:--http://practice.geeksforgeeks.org/problems/minimum-steps-to-get-desired-array/0

code:--

import java.util.*;
import java.lang.*;
import java.io.*;

class GFG {
public static void main (String[] args) {
Scanner sc=new Scanner(System.in);
int num;
int n;
int t=sc.nextInt();
while(t-- >0)
   {
   n=sc.nextInt();
   int sum=n,max=0,temp=0;
   while(n-- >0)
       {
temp=0;
       num=sc.nextInt();  
if(num==1 ) continue;
if(num==0)  { --sum; continue; }
while(num!=1)
if((num&1)==1) { --num; ++sum; }
else if((num&(num-1))==0)   {temp+=(int)(Math.log(num)/Math.log(2)); break;}
else { num>>=1;++temp; }
if(max<temp)  max=temp;//finding max element multiple of 2 in array
       }
   System.out.println(sum+max);
   }
}
}

Length of Last word

problem id:-http://practice.geeksforgeeks.org/problems/length-of-last-word/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
char str[105];
int t,ans;
sc(t);
cin.ignore();
while(t--)
{
cin.getline(str,101,'\n');
printf("str is %s\n",str);
int l=strlen(str)-1,flag=0;
ans=l+1;
while(l>=0)
{
if(str[l]!=' ') flag=1;
else if(flag==1) { flag=2; break;}
else --ans;
--l;
}
if(flag==2) ans+=-l-1;
else if(!flag) ans=0;
pf(ans);
pfnl();
}
return 0;
}