Showing posts with label Hackerearth. Show all posts
Showing posts with label Hackerearth. Show all posts

Sauron Eye | Solve programming problems on HackerEarth


Sauron Eye | Solve programming problems on HackerEarth
Gandalf the Grey is in trouble as Saurons eye Rearrived in the middle world. Now he has to prepare for the war, But in order to defeat Sauron he has to know the power of saurons eye on the day in which he wants to attack.
According to the Elves(Good Friends of Gandalf),Gandalf came to know that saurons eye power on current day is equal to 3 time to its power on previous day minus the power on a day before previous day.
Now Gandalf ask Frodo to give him the power of the Saurons Eye on nth day, but poor Frodo is not good in mathematics so he ask for help from you.
Given the nth day you have to give Frodo power of Saurons eye on that day mod 109 + 7.
Note You can assume the power of sauron eye is 1 on 1st day
and 3 on 2nd day.

As you have rightly identified given n solution is
f(n)= 3*f(n-1)-f(n-2);
This can be solved using matrix exponentiation as recurrance matrix
[3 -1 ]
[1 0 ]
you can read about matrix exponentiation here
http://zobayer.blogspot.in/2010/11/matrix-exponentiation.html
https://www.hackerearth.com/submission/1950666/
  1. static int mod = (int)(1E9 + 7);
  2. static long fib(long n)
  3. {
  4. long F[][] = {{3,-1},{1,0}};
  5. if (n == 0)
  6. return 0;
  7. else if(n==1)
  8. return 1;
  9. power(F, n-1);
  10. return F[0][0];
  11. }
  12. /* Optimized version of power() in method 4 */
  13. static void power(long F[][], long n)
  14. {
  15. if( n == 0 || n == 1)
  16. return;
  17. long M[][] = {{3,-1},{1,0}};
  18. power(F, n/2);
  19. multiply(F, F);
  20. if (n%2 != 0)
  21. multiply(F, M);
  22. }
  23. static void multiply(long F[][], long M[][])
  24. {
  25. long x = ((F[0][0]*M[0][0])%mod + (F[0][1]*M[1][0])%mod)%mod;
  26. long y = ((F[0][0]*M[0][1])%mod + (F[0][1]*M[1][1])%mod)%mod;
  27. long z = ((F[1][0]*M[0][0])%mod + (F[1][1]*M[1][0])%mod)%mod;
  28. long w = ((F[1][0]*M[0][1])%mod + (F[1][1]*M[1][1])%mod)%mod;
  29. F[0][0] = x;
  30. F[0][1] = y;
  31. F[1][0] = z;
  32. F[1][1] = w;
  33. }
Read full article from Sauron Eye | Solve programming problems on HackerEarth

Once upon a time in Time-Land | Solve programming problems on HackerEarth


Once upon a time in Time-Land | Solve programming problems on HackerEarth
In a mystical TimeLand, a person's health and wealth is measured in terms of time(seconds) left. Suppose a person there has 24x60x60 = 86400 seconds left, then he would live for another 1 day. A person dies when his time left becomes 0. Some time-amount can be borrowed from other person, or time-banks. Some time-amount can also be lend to another person, or can be used to buy stuffs.
Our hero Mr X, is in critical condition, has very less time left.
Today's the inaugural day of a new time-bank. So they are giving away free time-amount worth 1000 years.
Bank released N slips, A[1], A[2], .... A[N]. Each slip has a time-amount(can be +ve as well as -ve).
A person can pick any number of slips(even none, or all of them, or some of them) out of the N slips. But bank introduced a restriction, they announced one more number K. Restriction is that, if a person picks a slip A[i], then the next slip that he can choose to pick will be A[i+K+1]. It means there should be a difference of atleast K between the indices of slips picked.
Now slip(s) should be picked in such a way that their sum results in maximum positive time-amount sum possible with the given restriction.
If you predict the maximum positive sum possible, then you win.
Mr X has asked for your help. Help him win the lottery, and make it quick!
Input Format:
First line of the test file contains single number T, the number of test cases to follow.
Each test case consists of two lines.
First line contains two numbers N and K , separated by a space. Second line contains the N numbers A[1], A[2] ..... A[N] separated by space.
Output Format:
For every test case, output in a single line the maximum positive sum possible, that is output for the case.

Solution :
  • maximum sum is to be found, so we ignore negative integers.
  • If we select ith index, next index to be selected will be (i+K+1) th index.
Lets take a DP approach. We are going to construct an array in which all the indexes represent maximum possible sum upto that index following the above rules.
  • Take an array of size N. SUM(0....N-1)
  • Initialize all elements of that array to zero.
  • For an array with just 1 element, maximum sum would be that element or zero, SUM[0] = max(0, first element)
  • Then we iterate from index 1 to N-1.
    • If integer at current index is negative we take the sum upto previous index as the maximum sum.
    • If current index is less than or equal to K, i.e. we are still trying to pick the first element optimally, we pick the maximum(integer at current index, sum upto previous index).
    • If Current index is greater than K, we select the maximum(sum upto previous index , integer at current index + sum upto [current index - K - 1]).
  • SUM[N-1] will be our answer.
    for(;T--;)
    {
        int N,K;
        cin >> N >> K;

        vector<long long> A(N), SUM(N,0);

        for (int i = 0; i < N; ++i)
            cin >> A[i];

        SUM[0] = max(A[0],0ll);
        for (int i = 1; i < N; ++i)
        {
            if(A[i] < 0)
                SUM[i] = SUM[i-1];
            else if(i-K-1 < 0)
                SUM[i] = max(SUM[i-1],A[i]);
            else
                SUM[i] = max(SUM[i-1],A[i]+SUM[i-K-1]); 
        }
        cout << SUM[N-1] << "\n";
    }
Read full article from Once upon a time in Time-Land | Solve programming problems on HackerEarth

Easy IPhone | Solve programming problems on HackerEarth


Easy IPhone | Solve programming problems on HackerEarth
Ricky is crazy about IPhones, he want to use IPhones throughout his life.
Ricky has X number of IPhones, he can use only one IPhone for a year. After one year of use an IPhone becomes useless and he cannot use it any more. The company has an exchange offer for Ricky; he will get one new IPhone if he will return Y number of useless IPhones. This new IPhone can be used like any other new IPhones.
Now you have to tell for how many years can he use IPhones?

    int X, Y;
    scanf ("%d %d", &X, &Y);
    int ret = 0, useless = 0;
    while (X) {
        ret += X;
        useless += X;
        X = useless / Y;
        useless %= Y;
    }
    printf ("%d\n", ret);
Read full article from Easy IPhone | Solve programming problems on HackerEarth

The Magic HackerEarth Nirvana solutions Hiring Challenge - GoHired


The Magic HackerEarth Nirvana solutions Hiring Challenge - GoHired
Navi got a task at school to collect N stones. Each day he can collect only one stone. As N can be a very large number so it could take many days to complete the task,
but then he remembers that his mother gave him a magic that can double anything (i.e if he has 2 stones, the magic will make them to 4 stones). Navi can use this magic any number of time on the collected stone on a particular day and add this to the previously collected stones. Remember that he wants exactly N stones and he can't throw any stone. If he gets more than N stones then he gets 0 marks, of course he doesn't want 0 marks. Help him to collect exactly N stones in minimum number of days.

1. Navi gets 1 stone each day, on which she can apply the magic operation and raise it to any power of 2 (1->2->4->8 .... ) . (Note that there's no restriction on the number of times she can apply the magic operation).
2. We have to minimize the number of days in which we can collect N stones.
Now the problem is reduced to: Representing a number N as sum of powers of 2, such that the number of elements chosen are minimum.
e.g. 5 can be represented as 1+1+1+1+1, 1+2+2, 1+4, etc. The combination: 1+4 is the best answer(i.e. 2), since we need to minimize the number of elements chosen.
This problem is again reduced to finding number of set bits when the number N is represented in binary. This method is correct since in binary representation of number each power of 2 is represented by a particular bit which can be either 0 or 1(i.e. chosen or not-chosen).

  1. int countSetBits(int n)
  2. {
  3. int count = 0;
  4. while (n) {
  5. n &= (n-1) ;
  6. count++;
  7. }
  8. return count;
  9. }

int T,N,stone,remaining,day;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
day=1;
remaining=N;
    while(1)
    {
        if(remaining==1) 
        break;
        if(remaining==0)
        {day--; break;}
        stone=1;
        while( (stone*2) <= remaining){
            stone = 2*stone;
        }
    remaining = remaining - stone;
    day++;
    }
printf("%dn",day);
Read full article from The Magic HackerEarth Nirvana solutions Hiring Challenge - GoHired

Problem solving with programming: Check if a number is the mirror image of itself


Problem solving with programming: Check if a number is the mirror image of itself
https://www.hackerearth.com/problem/algorithm/mirror-of-mahatma-gandhi/description/
Given an arbitrarily large number, how to check if it is same as it's mirror image.
enter image description here
Only need traverse once ==>
string result = "YES";
cin >> input;
int i,j;
for( i = 0; i < input.size(); i++ )
{
if( input[i] != '0' && input[i] != '1' && input[i] != '8' )
{
result = "NO";
break;
}
}
for( i = 0, j = input.size()-1; i <= j; i++, j--)
{
if( input[i] != input[j] )
{
result = "NO";
break;
}
}
cout << result << endl;
}
Read full article from Problem solving with programming: Check if a number is the mirror image of itself

HackerRank ‘Max Min’ / ‘Angry Children’ Solution | MartinKysel.com


HackerRank 'Max Min' / 'Angry Children' Solution | MartinKysel.com
Given a list of N integers, your task is to select K integers from the list such that its unfairnessis minimized.
if (x1,x2,x3,,xk) are K numbers selected from the list N, the unfairness is defined as
max(x1,x2,,xk)min(x1,x2,,xk)

where max denotes the largest integer among the elements of K, and min denotes the smallest integer among the elements of K.
Pre-sort:
The unfairness is the distance between K elements in a sorted array.
if __name__ == '__main__':
    n = input()
    k = input()
    candies = [input() for _ in range(0,n)]
    candies.sort()
    min_diff = 1000000000
    ## Write code here to compute the answer using (n, k, candies)
    for i in xrange(n - k + 1):
        min_diff = min(min_diff, candies[i+k-1] - candies[i])
     
    print min_diff
Finding a sub list with least max-min difference - Codeforces puzzle
http://comproguide.blogspot.com/2015/02/finding-sub-list-with-least-max-min.html
The solution is to first sort the numbers in ascending order, and move a sliding window of sub-list size from begin to end while keeping track of the minimum difference between first and last numbers of the sub-list.
sort(sizes.begin(), sizes.end());
int start = 0, end = students-1;
int minDiff = INT_MAX;
while( end < list_len )
{
minDiff = min(minDiff, sizes[end]-sizes[start]);
start++;
end++;
}
cout << minDiff << endl;
Read full article from HackerRank 'Max Min' / 'Angry Children' Solution | MartinKysel.com

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts