Merge Sort
Resource Link
GeeksForGeeks
Visualization
Hackerearth
হাসানের রাফখাতা
Implementation:
Binary Search
01. বাইনারি সার্চ – à§§(শাফাà§Ÿেত আশরাফ)Binary Search
02. বাইনারি সার্চ - ২(বাইসেকশন) - শাফাà§Ÿেত আশরাফ
03. বাইসেকশন মেথড - আহমাদ ফাইয়াজ
04. বাইনারি সার্চ - হাসান আবদুল্লাহ
05. Painless Binary Search - আবু আসিফ খান চৌধুরী
06. Binary Search part - 1 - শাকিল আহমেদ
07. TopCoder Tutorial
08. One Problem from Spoj
09. Chinese problem solving blog
10. Good Resource (***)
11. HackerEarth1, HackerEarth2
12. TopCoder
13. GeeksForGeeks
Randomized Binary Search Algorithm
Visualization
Breadth First Search
Blog Link:
গ্রাফ থিওরিতে হাতেখড়ি-৪(ব্রেডথ ফার্স্ট সার্চ)
Visualization
visualgo.net
ট্রি ডাà§Ÿামিটার
Breadth First Search or BFS for a Graph
Breadth First Search (hackerearth)
0-1 BFS
Shakil Ahmed's Blog
Shakil Ahmed's Blog ( 0-1 BFS)
Implementation:
complexity: O( nodes + edges).
0-1 BFS
levelWiseNodeCount
SourceToOtherNodeDistance
Problem:
Spoj:
1. PPATH - Prime Path
2. ONEZERO - Ones and zeros
3. WATER - Water among Cubes
4. KATHTHI - KATHTHI
5. NAKANJ - Minimum Knight moves !!!
Codechef:
1. Chef and Digit Jumps
uva:
1. 10004 - Bicoloring
2. 336 - A Node Too Far
3. 567 - Risk
4. 10653 - Bombs! NO they are Mines!!
5. 439 - Knight Moves
6. 762 - We Ship Cheap
7. 429 - Word Transformation
LightOj:
1094 - Farthest Nodes in a Tree ( tree Diameter)
1257 - Farthest Nodes in a Tree (II) (tree diameter)
E-Maxx blog problemlist link
SUBXOR - SubXor
SUBXOR - SubXor
Subarray Xor
Topic: Trie Tree
Explanation
Solution 01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | #include <bits/stdc++.h> using namespace std; #define INF 1<<30 #define MAX 200005 #define FASTIO ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); typedef long long ll; struct trie { int L,R; int lft, rgt; trie(){ L = R = 0; lft = rgt = -1; } }; int Index = 0; void Insert(int value, int idx, int depth, trie *tree) { for(int i = depth-1; i >= 0; i--){ int bit = (value >> i ) & 1; if(bit){ tree[idx].R++; if(tree[idx].rgt == -1){ tree[idx].rgt = ++Index; idx = Index; } else idx = tree[idx].rgt; } else{ tree[idx].L++; if(tree[idx].lft == -1){ tree[idx].lft = ++Index; idx = Index; } else idx = tree[idx].lft; } } } int Query(int value, int cmp, int idx, int depth, trie* tree) { int ans = 0; for(int i = depth-1; i >= 0; i--){ int vBit = (value >>i) & 1; int cBit = (cmp >> i) & 1; if(cBit){ if(vBit){ ans += tree[idx].R; idx = tree[idx].lft; } else{ ans += tree[idx].L; idx = tree[idx].rgt; } } else{ if(vBit) idx = tree[idx].rgt; else idx = tree[idx].lft; } if(idx == -1)break; } return ans; } int main() { FASTIO ///* //double start_time = clock(); #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); freopen("error.txt", "w", stderr); #endif //*/ int T; cin >> T; while(T--){ trie tree[MAX]; Index = 0; int n,k; cin >> n >> k; int XOR = 0; ll ans = 0; Insert(0,0,20,tree); for(int i =0; i < n; i++){ int x; cin >> x; XOR = XOR ^ x; ans += Query(XOR,k,0,20,tree); Insert(XOR,0,20,tree); } cout << ans << endl; } //double end_time = clock(); //printf( "Time = %lf ms\n", ( (end_time - start_time) / CLOCKS_PER_SEC)*1000); return 0; } |
Solution 02
Solution 03
Video Conference
Video Conference
Topic: trie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | vector<string> solve (vector<string> names) { unordered_set<string> s; unordered_map<string, int> mp; vector<string>ans; for(const auto& name: names){ auto it = mp.find(name); if(it != mp.end()){ it->second++; ans.push_back(name + ' ' + to_string (it->second)); } else{ mp[name] = 1; string t; bool inserted = false; for(auto c : name){ t += c; auto p = s.insert(t); if(!inserted && p.second){ inserted = true; ans.push_back(t); } } if(!inserted) ans.push_back(t); } } return ans; } |
Another Solution
4682 - XOR Sum
4682 - XOR Sum
Topic : Trie Tree
N.B: Output not print in a single line ):
Solution 01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #include <bits/stdc++.h> using namespace std; #define INF 1<<30 #define MAX 10005 #define FASTIO ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); typedef long long ll; #define INT_SIZE 32 struct TrieNode { int value; TrieNode *ar[2]; }; TrieNode *newNode() { TrieNode *temp = new TrieNode; temp->value = 0; temp->ar[0] = temp->ar[1] = NULL; return temp; } void insert(TrieNode *root, int pre_xor) { TrieNode *temp = root; for(int i = INT_SIZE - 1; i >= 0; i--){ bool val = pre_xor & (1 << i); if(temp->ar[val] == NULL) temp->ar[val] = newNode(); temp = temp->ar[val]; } temp->value = pre_xor; } int query(TrieNode *root, int pre_xor) { TrieNode *temp = root; for(int i = INT_SIZE - 1; i >= 0; i--){ bool val = pre_xor & (1 << i); if(temp->ar[1-val] != NULL) temp = temp->ar[1-val]; else if(temp->ar[val] != NULL) temp = temp->ar[val]; } return pre_xor ^ (temp->value); } int maxSubarrayXOR(int ar[], int n) { TrieNode *root = newNode(); insert(root, 0); int res = INT_MIN, pre_xor = 0; for(int i = 0; i < n; i++){ pre_xor = pre_xor ^ ar[i]; insert(root, pre_xor); res = max(res, query(root, pre_xor)); } return res; } int main() { //FASTIO ///* //double start_time = clock(); #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); freopen("error.txt", "w", stderr); #endif //*/ int T; cin >> T; while(T--){ int n; cin >> n; int a[n+2]; for(int i = 0; i < n; i++){ cin >> a[i]; } cout << maxSubarrayXOR(a,n) << endl;; // if(T != 0) cout << " "; } //double end_time = clock(); //printf( "Time = %lf ms\n", ( (end_time - start_time) / CLOCKS_PER_SEC)*1000); return 0; } |