I realised that there is only one way improve one's skill, and that is through practice. So I decided to practice more topics and more problems on codeforces and different judges. This is simply a daily record for what I did through my vacation.
I also want to tell you about stopstalk.com . It is a good site to make and keep you daily coding record.
16 MAY 2017
Problems Solved -
This was a simple problem and it used Z function for prefix length calculation
solution link — http://codeforces.com/contest/535/submission/27152004
Although the problem was simple, I had some trouble in understanding the language of the problem. It took time more than required.
solution link — http://codeforces.com/contest/551/submission/27160921
Participated Contest -
I participated in a virtual contest ( Round 308 DIV 2 ). I was able to solve all the problems, but then last problem was accepted just 2 min before the contest ended.
The problem was fairly simple, but then rather than simply adding the area, I made a 2-D hash map. Guess I have to practice a little more for problem A.
solution link — http://codeforces.com/contest/552/submission/27165795
The problem was mathematical. I solved it by forming a series. Got one WA for not using long long.
solution link — http://codeforces.com/contest/552/submission/27165912
I solved the problem using meet in middle. But the editorial talked about an another wonderful way to solve that. Do watch the editorial solution. It is an excellent concept in itself.
solution link — http://codeforces.com/contest/552/submission/27166275
This was another interesting problem to solve. I used concept of slopes to generate triangle. Got 4 WA. Was not taking care of slope sign and was not handling 0 slope and inf slope cases.
solution link — http://codeforces.com/contest/552/submission/27166893
Pretty interesting problem to solve both by greedy and by DP. I used the later N*N approach. Initially thought of using multiplication as boundaries, but then didn't wanted to take risk. Got 4 WA because of simple mistakes in the loops. Got accepted just before 2 min from end.
solution link — http://codeforces.com/contest/552/submission/27167519
17 MAY 2017
Solved very few problems. Found a lot of problems hard to solve.
Problems Solved -
It was a good problem of binary search. Although I found it a little hard for problem C Div 2. Guess I have practice still more. It used an standard NlogN solution using binary search where we have to binary search over the completion time of the task and then check the users required. Good problem for practice.
solution link — http://codeforces.com/contest/551/submission/27175198
Fairly easy problem. Requires direct implementation
solution link — http://codeforces.com/contest/549/submission/27181042
very good problem for practice. I was missing a lot of corner cases while solving. Had to search for a method to find mismatch in logN time in the array. I think this problem was worth solving.
solution link — http://codeforces.com/contest/534/submission/27184116
Problems Unsolved -
It would be a great help if someone could help me with the unsolved problems.
18 MAY 2017
Problems Solved -
I solved some simple problems on hackerearth and URI. One problem that I liked was from URI —
This was a good problem where we had to swap nodes. I used map for mapping and index function and an inverse index function for getting position of a node and getting value at any position. for swapping, I swapped those two.
solution link — https://code.hackerearth.com/a4c9b2Y
Then some problems on codeforces
Finally solved the matrix problem. Used binary search for reducing the size of squares.
solution link — http://codeforces.com/contest/549/submission/27189164
solution link — http://codeforces.com/contest/519/submission/27193319
solution link — http://codeforces.com/contest/519/submission/27201264
Turned out to be easy for problem C. Just travel over one possible value, then find the value of other and then maximise the sum.
solution link — http://codeforces.com/contest/519/submission/27201384
Had fun while solving this. Used map to store pairs of character and prefix sum values. Then used a linear algorithm to add values for all location while deleting previously occurred nodes. Did in NlogN.
solution link — http://codeforces.com/contest/519/submission/27202224
Problems unsolved -
19 MAY 2017
I only participated in a virtual contest on URI. Few of the good problems were —
The problem was fairly easy but the statement was bit confusing.
solution link — https://code.hackerearth.com/1144e5D
Again the main problem was decoding the statement. The only place that mentioned that the graph was undirected was when the statement said the relation is mutual. But while reading the problem you will feel like the graph is directed.
solution link — https://code.hackerearth.com/c2f17dC
It was a basic mathematics problem that used mod inverse and factorial.
solution link — https://code.hackerearth.com/eddc17Y
20 MAY 2017
Today I solved problems on snackdown qualifiers and hackerearth circuits. In night, I participated in round 415 DIV 2. The results were not very good. Was only able to solve 3 problems. I feel like I have difficulty with interactive problems. Will have to practice more.
Apart from the contests, I solved an extra problem on hackerrank.
The problem required to find the kth ancestor with dynamic insertion and deletion. I used an array to keep track of active elements. Then, for insertion and deletion, I used dp on that particular node. It only required logN steps. Finding the solution was then easy. For insertion in beginning, I used level order traversal to insure that the parent are inserted before the child. Good problem to practice.
solution link — https://code.hackerearth.com/3332f9b
21 MAY 2017
Today I practise some problems on codeforces and spoj.
It was a simple problem of finding the LCA of a given pair of nodes. I used dp to solve the problem. Another possible way is to do an euler tour of the tree and then use RMQ to find the LCA. sparse tree can answer RMQ in constant time, so that will be faster.
solution link — http://paste.ubuntu.com/24622053/
First increase the count of the nodes that are given to you. The decrease the count of their LCA by 2. The thing is, we are going up level by level. At any given level at a time. We see how many fools can go up a level. That is equal to fool that came to that level minus the fool that stay at that level node. The number of fool staying was done by subtracting at LCA as they want to meet at a path of minimum distance.
solution link — http://codeforces.com/contest/192/submission/27263078
It requires simple counting of one and zero. Giving it some time will directly lead to this conclusion
solution link — http://codeforces.com/contest/556/submission/27264409
The problem was really simple. It only required implementation. One can easily come up with an N*N solution. As soon as one come up with an N*N solution, One can easily reduce it to an O(N) solution. link for both solution —
It was among the most confusing problem statement that I can across in my life. Even after reading it 4 — 5 time, I was unable to understand what actually was going on. So here is a simple problem statement. One can remove one doll at a time and that too only the uppermost. It means that the only chain that we don't have to break is the chain 1, 2, 3, 4 ... k. and then break every other doll and the n assemble over the k length chain.
solution link — http://codeforces.com/contest/556/submission/27266874
It was an amazingly good problem of greedy using binary search as a sub routine. It took some time to come up with the solution. I made an array that had distance (max distance b/w boundaries, min distance b/w boundaries). Then sorted them according to the max distance. Then while traversing, I gave the shortest possible length of bridge to the required gap. If it was not possible, then answer was no.
solution link — http://codeforces.com/contest/556/submission/27270654
22 MAY 2017
Today was an extremely bad day for me. I participated in a virtual contest and was able to solve only 2 problems. Realised how bad I am at geometry. So tomorrow is going to be an extensive practice session. I also solved one problem on hackerearth circuits. A bad day :(
23 MAY 2017
Today I solved a few problems and participated in a virtual contest. Guess something went wrong with CF. In the middle of virtual contest, It dumped me out of the contest, and when 45 min were left, It again brought back me in. I solved One problem on hackerearth circuits.
The problem was easy, But I took a lot of time to code. Just had to check whether there we some points greater equal 4. If not then alien, otherwise can be checked for bear and elephant.
solution link — http://codeforces.com/contest/471/submission/27301710
Again an easy problem with more coding at least for me. Direct implementation.
solution link — http://codeforces.com/contest/471/submission/27301694
An easy problem with observation. Just found out the minimum card required for any height and then checked whether other cards can be arranged accordingly. Easy for C.
solution link — http://codeforces.com/contest/471/submission/27301680
The D problem was easier than C. Can be solved using string matching. Instead of matching the strings, just match the steps. Solution will be clearer.
solution link — http://codeforces.com/contest/471/submission/27301654
An easy problem for E. Can be solved just with dfs and binary search. I have two solutions
The best problem I solved in day. Try to put minimum number node in as early index as possible. That is it.
solution link — http://paste.ubuntu.com/24640971/
24 MAY 2017
Still doing hackerearth circuits. Unable to do consecutive remainder. Still have to practice more maths.
25 MAY 2017
Practiced some easy problems on hackerearth and codeforces. The problems that I practiced on hackerearth were very easy. I cannot say the same for codeforces. Today's question were a bit harder.
The problem was of finding mst including a particular edge. The problem required finding the maximum length path joining the the two vertices. Let us say the edge weight cam out to be x, and the weight of the included edge is y, The cost of mst is z. Then ans is z — x + y.
Coming up with a solution is an easy task. The hard part lies only in the implementation. Just need to find an equidistance path from both nodes and then count all node reachable from the node such that we do not go in the path of the given two vertices.
The problem was of geometry and we just had to convert the hexagon in a triangle by drawing triangle on any three alternate edges.
solution link — http://codeforces.com/contest/560/submission/27331484
Just needed to convert both the string into lexicographical smallest. Then compare whether the given two string are equal.
solution link — http://codeforces.com/contest/560/submission/27333242
The problem was of combinatorics. Just needed to find the ways of going to a particular point without going on any other point that lies before it. the ans was C(x+y, x);
26 MAY 2017
Simple Maximum spanning tree.
solution — http://paste.ubuntu.com/24675192/
We just have to traverse in reverse direction. If we get x+1 for any x, we replace that x by x+1 in the multiset.
solution — http://paste.ubuntu.com/24675209/
Can make a hash for every node using some random value. then check whether the hash value of r and l-1 are same.
solution — http://paste.ubuntu.com/24675224/
27 MAY 2017
Can be solved by storing frequency, first occurrence and last occurrence.
just sort the array. find minimum size for both boys and girls. Using this we can find the amount x. Then print minimum of 3*x or w.
Can be solved using simple brute force. Find total sum, and for every length find the maximum sum that you can save.
Direct brute force.
had to come up with a linear state to save memory limit exceed. N*N complexity. For every possible end, search for the corresponding start.
28 MAY 2017
The best hint for this question would be to first try for upto 100000 and then try to find the pattern. Also there are few diversions from regular pattern at few places.
solution — http://paste.ubuntu.com/24703147/
Direct brute force
solution — http://paste.ubuntu.com/24703165/
It is actually a dp problem. Try to find the number of even sequence starting and ending at a particular point.
solution — http://paste.ubuntu.com/24703194/
Just Greedily allocate first to first.
solution — http://paste.ubuntu.com/24703210/
29 MAY 2017
Just store the frequency in a pair then sort and print.
solution — http://paste.ubuntu.com/24717004/
Just direct Implementation
solution — http://paste.ubuntu.com/24717024/
The question was fun to try due to some unusual constraints.
solution — http://paste.ubuntu.com/24717043/
# solution — http://paste.ubuntu.com/24717066/
solution — http://paste.ubuntu.com/24717079/
Make sure that the variables are not always space separated from = sign.
solution — http://paste.ubuntu.com/24717087/
This problem has wrong solution. Just check whether the string don't match.
solution — http://paste.ubuntu.com/24717093/
If the string don't match at a particular pair position, then one can add any number of possible and equal characters on either side.
solution — http://paste.ubuntu.com/24717104/
just store the first m characters and the index in a pair and then sort.
solution — http://paste.ubuntu.com/24717116/
30 MAY 2017
The idea is to use two pointer and then keep updating the answer on the go.
solution — http://paste.ubuntu.com/24728003/
solution — http://paste.ubuntu.com/24728021/
The idea is to do the bfs over all values
The idea was to convert every level to leaf level and then sort and combine the range accordingly. Then check over all possible feasible combination.
31 MAY 2017
Just make 26 segment tree, one for each letter. And then use lazy update for sorting.
Basic dp problem
1 JUNE 2017
Just gave the contest on codeforces
2 JUNE 2017
Just find all prime powers and that will be enough.
By pegion hole principle, Whenever n >= m, and is yes. Or you can do an exhaustive search using set.
Just for all i check whether j is in range
Can be solved using bridge. Make a separate graph that contains only shortest path vertices, and make it undirected. now find all bridges. Since there can be multiple loops, instead of direct checking parent, check whether index matches or not.
3 JUNE 2017
Doing Codechef Long Challange
4 JUNE 2017
solution — http://paste.ubuntu.com/24791044/
solution — http://paste.ubuntu.com/24791048/
5 JUNE 2017
Did codechef long and participated in education codeforces round
6 JUNE 2017
Just generate all numbers and then for every range, add the required number.
7 JUNE 2017
Did contest on codeforces
8 JUNE 2017
Create all possible range, then according to every query, update the ranges and ans accordingly.
Direct implementation of trie. Make loose and win accordingly and then decide for the answer.
9 JUNE 2017
Standard problem of square root decomposition. Just divide the array in block of size sqrt(n) and solve for each block. Then combine the ans for each query.
10 JUNE 2017
Practised some simple problems on CF.
11 JUNE 2017
Solved MKTHNUM on spoj.
Binary search over the max possible length, Then try to break that triangle in smaller part again using binary search