diff --git a/December 01/c++_moni-08.cpp b/December 01/c++_moni-08.cpp new file mode 100644 index 0000000..013e689 --- /dev/null +++ b/December 01/c++_moni-08.cpp @@ -0,0 +1,19 @@ +#include + +using namespace std; + +int main() +{ + int n, total = 0, a, maxi = 0, pos; + cin >> n; + for(int i = 0; i> a; + total += a; + if(maxi < a){ + pos = i; + maxi = a; + } + } + cout << total << endl << pos; + return 0; +} diff --git a/December 02/c++_moni-08.cpp b/December 02/c++_moni-08.cpp new file mode 100644 index 0000000..55aa5bd --- /dev/null +++ b/December 02/c++_moni-08.cpp @@ -0,0 +1,36 @@ +#include + +using namespace std; + +vector v; +unordered_map filter(string s){ + int temp = 0; + unordered_map mp; + for(int i = 1; i= '0' && s[i] <= '9'){ + temp = (temp*10)+int(s[i] - '0'); + } else { + mp[temp]++; + if(!count(v.begin(), v.end(), temp)) v.push_back(temp); + temp = 0; + } + } + return mp; +} + +int main() +{ + string s; + cin >> s; + unordered_map mp = filter(s); + cout << '['; + for(int i = 0; i < v.size(); i++){ + if(i == v.size()-1){ + cout << mp[v[i]]; + break; + } + cout << mp[v[i]] << ','; + } + cout << "]"; + return 0; +} diff --git a/December 03/c++_moni-08.cpp b/December 03/c++_moni-08.cpp new file mode 100644 index 0000000..1c38661 --- /dev/null +++ b/December 03/c++_moni-08.cpp @@ -0,0 +1,19 @@ +#include + +using namespace std; + +int main() +{ + int n; + cin >> n; + int maxi = 0, a, ans = 0; + for(int i =0; i> a; + if(maxi < a){ + maxi = a; + ans++; + } + } + cout << ans; + return 0; +} diff --git a/December 04/c++_moni-08.cpp b/December 04/c++_moni-08.cpp new file mode 100644 index 0000000..82542f7 --- /dev/null +++ b/December 04/c++_moni-08.cpp @@ -0,0 +1,27 @@ +#include + +using namespace std; + +int main() +{ + string s; + cin >> s; + char temp = s[0]; + string ans = ""; + transform(s.begin(), s.end(), s.begin(), ::tolower); + for(int i = 1; i< s.size(); i++){ + if(s[i] == temp){ + cout << s[i] << s[i]; + exit(0); + } + temp = s[i]; + } + for(int i=1; i + +using namespace std; + +int main(){ + int ans = 0, n, total = 0; + cin >> n; + vector v; + for(int i = 0; i> a; + v.push_back(a); + total += a; + } + int avg = total/n; + for(auto i : v){ + if(i >= avg) ans += i; + } + cout << ans; + return 0; +} diff --git a/December 06/c++_moni-08.cpp b/December 06/c++_moni-08.cpp new file mode 100644 index 0000000..585a2b4 --- /dev/null +++ b/December 06/c++_moni-08.cpp @@ -0,0 +1,36 @@ +#include + +using namespace std; + +int main() +{ + int n; + cin >> n; + vector v; + for(int i = 0; i> s; + v.push_back(s); + } + vector ans; + ans.push_back(v[0]); + for(int i = 1; i 1) break; + int temp = 0; + if(abs(s1-s2) == 1) temp++; + for(int j = 0; j + +using namespace std; + +bool rectangleInCircle(float h, float b, float r){ + float d = sqrt(pow(h,2)+pow(b,2)); + if(d == 2*r) return true; + return false; +} + +int main() +{ + float h,b,r; + cout<< "Enter the height, breadth of rectangle and radius of circle: "; + cin >> h >> b >> r; + if(rectangleInCircle(h, b, r)) cout << "true"; + else cout << "false"; + return 0; +} diff --git a/December 08/c++_moni-08.cpp b/December 08/c++_moni-08.cpp new file mode 100644 index 0000000..5cab296 --- /dev/null +++ b/December 08/c++_moni-08.cpp @@ -0,0 +1,28 @@ +#include +using namespace std; + +int main() { + int n; + cin >> n; + vector> square(n, vector(n, -1)); + int x = (n / 2), y = n - 1; + for(int i=1; i<=n*n; i++) { + square[x][y] = i; + if(i % n == 0) y--; + else { + x--; + y++; + } + x += n; + x %= n; + y += n; + y %= n; + } + for(auto i : square) { + for(auto j : i) { + cout<< j << " "; + } + cout<< endl; + } + return 0; +} diff --git a/December 09/c++_moni-08.cpp b/December 09/c++_moni-08.cpp new file mode 100644 index 0000000..917b858 --- /dev/null +++ b/December 09/c++_moni-08.cpp @@ -0,0 +1,14 @@ +#include +using namespace std; + +int main() +{ + string s; + cin >> s; + int ans = 0; + for(int i = 0; i= 'A' && s[i] <= 'Z') ans++; + } + cout << ans; + return 0; +} diff --git a/December 10/sql_moni-08.sql b/December 10/sql_moni-08.sql new file mode 100644 index 0000000..cb42d4d --- /dev/null +++ b/December 10/sql_moni-08.sql @@ -0,0 +1,10 @@ +create database e; +use e; +CREATE table emp ( + empno int PRIMARY KEY, + empname varchar(50) +); +INSERT INTO emp VALUES (1, 'December'); +INSERT INTO emp VALUES (2, 'Algorithm'); +SELECT substring(empname,4,13) from emp; +SELECT substring(empname,2,2) from emp; diff --git a/December 11/c++_moni-08.cpp b/December 11/c++_moni-08.cpp new file mode 100644 index 0000000..7cb57d0 --- /dev/null +++ b/December 11/c++_moni-08.cpp @@ -0,0 +1,11 @@ +#include +using namespace std; + +int main() +{ + int n1, n2; + cout << "Enter the two numbers: "; + cin >> n1 >> n2; + cout << bitset<8>(n1+n2).to_string(); + return 0; +} diff --git a/December 12/c++_moni-08.cpp b/December 12/c++_moni-08.cpp new file mode 100644 index 0000000..aa49dbd --- /dev/null +++ b/December 12/c++_moni-08.cpp @@ -0,0 +1,36 @@ +#include + +using namespace std; + +int main() +{ + vector> box; + for(int i = 0; i<3; i++){ + cout << "Enter the No. of jewelry for Box" << i+1 << " :"; + int n; + cin >> n; + cout << "Enter the jewelry for Box" << i+1 << " :"; + for(int j = 0; j> s; + transform(s.begin(), s.end(), s.begin(), ::tolower); + box.push_back(make_pair(s, i+1)); + } + } + sort(box.begin(), box.end()); + int l = 0, h = box.size()-1; + while(l <= h){ + int m = (l+h)/2; + if(box[m].first == "gold"){ + cout << "Box" << box[m].second << " Contains the Gold"; + exit(0); + } + if(box[m].first > "gold"){ + h = m-1; + } else { + l = m+1; + } + } + cout << "Gold is not present"; + return 0; +} diff --git a/December 13/c++_moni-08.cpp b/December 13/c++_moni-08.cpp new file mode 100644 index 0000000..a242ed2 --- /dev/null +++ b/December 13/c++_moni-08.cpp @@ -0,0 +1,24 @@ +#include +using namespace std; + +string textToNum(string s){ + for(int i = 0; i= 'A' && s[i] <= 'C') s[i] = '2'; + else if(s[i] >= 'D' && s[i] <= 'F') s[i] = '3'; + else if(s[i] >= 'G' && s[i] <= 'I') s[i] = '4'; + else if(s[i] >= 'J' && s[i] <= 'L') s[i] = '5'; + else if(s[i] >= 'M' && s[i] <= 'O') s[i] = '6'; + else if(s[i] >= 'P' && s[i] <= 'S') s[i] = '7'; + else if(s[i] >= 'T' && s[i] <= 'V') s[i] = '8'; + else if(s[i] >= 'W' && s[i] <= 'Z') s[i] = '9'; + } + return s; +} + +int main() +{ + string s; + cin >> s; + cout << textToNum(s); + return 0; +} diff --git a/December 14/c++_moni-08.cpp b/December 14/c++_moni-08.cpp new file mode 100644 index 0000000..c92cdc3 --- /dev/null +++ b/December 14/c++_moni-08.cpp @@ -0,0 +1,154 @@ +#include +using namespace std; + +// Tree Node +struct Node +{ + int data; + Node* left; + Node* right; +}; + +Node* newNode(int val) +{ + Node* temp = new Node; + temp->data = val; + temp->left = NULL; + temp->right = NULL; + + return temp; +} + +Node* buildTree(string str) +{ + if(str.length() == 0 || str[0] == 'N') + return NULL; + + vector ip; + + istringstream iss(str); + for(string str; iss >> str; ) + ip.push_back(str); + + Node* root = newNode(stoi(ip[0])); + + queue queue; + queue.push(root); + + int i = 1; + while(!queue.empty() && i < ip.size()) { + + Node* currNode = queue.front(); + queue.pop(); + + string currVal = ip[i]; + + if(currVal != "N") { + + currNode->left = newNode(stoi(currVal)); + + queue.push(currNode->left); + } + + i++; + if(i >= ip.size()) + break; + currVal = ip[i]; + if(currVal != "N") { + currNode->right = newNode(stoi(currVal)); + + queue.push(currNode->right); + } + i++; + } + + return root; +} + +class Solution +{ +private: + +public: + void solve(Node* root, Node* &tgt, unordered_map &parent, int target){ + queue q; + q.push(root); + while(q.size() > 0){ + Node* curr = q.front(); + q.pop(); + if(curr->data == target) tgt = curr; + if(curr->left){ + parent[curr->left] = curr; + q.push(curr->left); + } + if(curr->right){ + parent[curr->right] = curr; + q.push(curr->right); + } + } + } + + vector KDistanceNodes(Node* root, int target , int k) + { + unordered_map parent; + Node* tgt = NULL; + solve(root, tgt, parent, target); + unordered_map visited; + visited[tgt] = true; + int lvl = 0; + queue q; + q.push(tgt); + while(!q.empty()){ + if(lvl++ == k) break; + int s = q.size(); + for(int i =0; ileft && !visited[curr->left]){ + q.push(curr->left); + visited[curr->left] = true; + } + if(curr->right && !visited[curr->right]){ + q.push(curr->right); + visited[curr->right] = true; + } + if(parent[curr] && !visited[parent[curr]]){ + q.push(parent[curr]); + visited[parent[curr]] = true; + } + } + } + vector res; + while(q.size() > 0){ + Node* curr = q.front(); + q.pop(); + res.push_back(curr->data); + } + sort(res.begin(), res.end()); + return res; + } +}; + +int main() +{ + Solution x = Solution(); + string s; + /*Give input as: + 17 8 27 4 14 N N N N 10 16 + 8 + 2 + */ + getline(cin,s); + Node* head = buildTree(s); + + int target, k; + cin>> target >> k; + getchar(); + + vector res = x.KDistanceNodes(head, target, k); + + for( int i=0; i + +using namespace std; + +int main() +{ + string s; + cin >> s; + int ans=1; + vector v(26, 0); + for(char c:s){ + ans=ans*2 - v[c-'a']; + v[c-'a']++; + } + cout << ans; + return 0; +} diff --git a/December 16/c++_moni-08.cpp b/December 16/c++_moni-08.cpp new file mode 100644 index 0000000..cbfde59 --- /dev/null +++ b/December 16/c++_moni-08.cpp @@ -0,0 +1,69 @@ +#include + +using namespace std; + +int main() +{ + int n, m; + cin >> n >> m; + vector> grid( n , vector (m, 0)); + for(int i = 0; i> k; + grid[i][j] = k; + } + } + int t = -1; + queue> q; + int z = 0, h = 0; + for(int i=0; i=0 && grid[i-1][j]==0){ + q.push({i-1, j}); + rl++; + grid[i-1][j] = -1; + } + //down + if(i+1=0 && grid[i][j-1] == 0){ + q.push({i, j-1}); + rl++; + grid[i][j-1] = -1; + } + //right + if(j+1 +using namespace std; + +struct Node +{ + int data; + Node* next; + + Node(int val) + { + data = val; + next = NULL; + } +}; + +void loopHere(Node* head, Node* tail, int position) +{ + if(position==0) return; + + Node* walk = head; + for(int i=1; inext; + tail->next = walk; +} + +bool isLoop(Node* head) +{ + if(!head) return false; + + Node* fast = head->next; + Node* slow = head; + + while( fast != slow) + { + if( !fast || !fast->next ) return false; + fast=fast->next->next; + slow=slow->next; + } + + return true; +} + +void removeLoop(Node* head){ + Node* slow = head; + Node* fast = head; + + while(slow->next && fast->next && fast->next->next) { + slow = slow->next; + fast = fast->next->next; + if (slow == fast) break; + } + if( slow != fast || slow == NULL || fast == NULL) return; + + slow = head; + while(slow != fast) { + slow = slow->next; + fast = fast->next; + } + Node* p = slow->next; + while(p->next != slow) + p = p->next; + p->next = NULL; +} + +int main() +{ + unordered_mapmyMap; + + int n, num; + cin>>n; + + Node *head, *tail; + cin>> num; + head = tail = new Node(num); + + myMap[head]=num; + + for(int i=0 ; i> num; + tail->next = new Node(num); + tail = tail->next; + myMap[tail]=num; + } + + int pos; + cin>> pos; + loopHere(head,tail,pos); + + if( isLoop(head)) removeLoop(head); + while(head != NULL){ + cout << head->data << " "; + head = head->next; + } + return 0; +} diff --git a/December 18/c++_moni-08.cpp b/December 18/c++_moni-08.cpp new file mode 100644 index 0000000..9d11618 --- /dev/null +++ b/December 18/c++_moni-08.cpp @@ -0,0 +1,69 @@ +#include +using namespace std; + +const int maxN = 1e5 + 5; +const int MOD = 1e9 + 7; +int n, x, cnt; +long long a[maxN], ans[maxN], dp[maxN], tot, f[maxN], g[maxN], inv[maxN]; +vector adj[maxN]; + +void dfs(int u, int p) { + for (auto v : adj[u]) { + if (v != p) { + dfs(v, u); + dp[u] = (dp[u] + dp[v]) % x; + } + } + if (p > 0 && dp[u] == 0) cnt++; +} + +long long temp(long long n, long long k) { + if (n < 0 || k < 0) return 0; + long long ans = f[n]; + ans *= g[n - k]; ans %= MOD; + ans *= g[k]; ans %= MOD; + return ans; +} + +int main () { + f[0] = 1; f[1] = 1; g[0] = 1; g[1] = 1; + inv[1] = 1; + for (int i = 2; i < maxN; i ++) { + inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD; + } + for (int i = 2; i < maxN; i ++) { + f[i] = f[i - 1] * i % MOD; + g[i] = g[i - 1] * inv[i] % MOD; + } + int T; + cin >> T; + while (T--) { + + cin >> n >> x; + for (int i = 0; i <= n; i++) ans[i] = 0, dp[i] = 0, adj[i].clear(); + tot = 0; + cnt = 0; + + for (int i = 1; i <= n; i++) { + cin >> a[i]; + dp[i] = a[i] % x; + tot += a[i]; + } + for (int i = 0; i < n - 1; i++) { + int u, v; cin >> u >> v; + adj[u].push_back(v); + adj[v].push_back(u); + } + if (tot % x) { + for (int i = 0; i < n; i++) cout << "0" << " \n"[i == n - 1]; + continue; + } + dfs(1, 0); + for (int i = 0; i < n; i++) { + if (i <= cnt) cout << temp(cnt, i) << ' '; + else cout << "0 "; + } + cout << '\n'; + } + return 0; +} diff --git a/December 19/c++_moni-08.cpp b/December 19/c++_moni-08.cpp new file mode 100644 index 0000000..2fbc0bf --- /dev/null +++ b/December 19/c++_moni-08.cpp @@ -0,0 +1,42 @@ +#include + +using namespace std; + +int main() +{ + int n, k; + cout << "Enter the No. of elements: "; + cin >> n; + cout << "Enter the k: "; + cin >> k; + cout << "Enter the sequence of elements: "; + vector s; + for(int i = 0; i> temp; + s.push_back(temp); + } + reverse(s.begin(), s.end()); + int count = 0, temp = 0, ans = 0, sum = 0; + vector visited (k, 0); + for(int i = 0; i + +using namespace std; + +vector shortestPath(int n, string start, string end, map> graph){ + priority_queue>, vector>>, greater>>> pq; + for (auto entry : graph[start]) { + pq.push({entry.second, {start, entry.first}}); + } + vector res; + while(!pq.empty() && pq.top().second.back() != end){ + auto temp = pq.top(); + pq.pop(); + for (auto entry : graph[temp.second.back()]) { + vector v = temp.second; + v.push_back(entry.first); + pq.push(make_pair(entry.second+temp.first, v)); + } + } + if(pq.size()) return pq.top().second; + else return {"-1"}; +} + +int main() { + int n; + cin >> n; + map> graph; + for(int i=0; i> a >> b >> c; + graph[a][b] = c; + } + string start, end; + cin >> start >> end; + vector res = shortestPath(n, start, end, graph); + for (auto x : res) { + cout << x << " "; + } + return 0; +} diff --git a/December 21/c++_moni-08.cpp b/December 21/c++_moni-08.cpp new file mode 100644 index 0000000..30fadd4 --- /dev/null +++ b/December 21/c++_moni-08.cpp @@ -0,0 +1,16 @@ +#include + +using namespace std; + +int main() { + string s; + cin >> s; + int n; + cout << "Enter the shift:"; + cin >> n; + for(int i = 0; i +using namespace std; + +int orangesRotting(vector>& grid) { + int n = grid.size(); + int m = grid[0].size(); + int t = -1; + queue> q; + int r = 0, f = 0; + for(int i=0; i=0 && grid[i-1][j]==1){ + q.push({i-1, j}); + rl++; + grid[i-1][j] = -1; + } + //down + if(i+1=0 && grid[i][j-1] == 1){ + q.push({i, j-1}); + rl++; + grid[i][j-1] = -1; + } + //right + if(j+1> n >> m; + vector>grid(n, vector(m, -1)); + for(int i = 0; i < n; i++){ + for(int j = 0; j < m; j++){ + cin >> grid[i][j]; + } + } + int ans = orangesRotting(grid); + cout << ans << "\n"; + return 0; +} diff --git a/December 23/c++_moni-08.cpp b/December 23/c++_moni-08.cpp new file mode 100644 index 0000000..c401219 --- /dev/null +++ b/December 23/c++_moni-08.cpp @@ -0,0 +1,30 @@ +#include +using namespace std; + +int main() { + vector> vec; + int n; + cin>>n; + for(int i=0;i>x>>y; + vec.push_back({x,y}); + } + int s1=0,s2=0; + bool s(false); + for(auto &it : vec){ + int x = it.first; + int y = it.second; + if(n==1 and (x%2 + y%2 == 1)){ + cout<<-1< +using namespace std; + +long long merge(vector &array,int s,int e){ + int i = s; + int m = s+(e-s)/2; + int j = m + 1; + long long ans=0; + int l=i; + for(int k=j;k<=e;k++){ + while(l<=m && array[l]<=array[k])l++; + ans+=(m-l+1); + } + vector temp; + while(i<=m and j<=e){ + if(array[i] <= array[j]){ + temp.push_back(array[i++]); + } + else{ + temp.push_back(array[j++]); + } + } + while(i<=m){ + temp.push_back(array[i++]); + } + while(j<=e){ + temp.push_back(array[j++]); + } + int k = 0 ; + for(int idx = s; idx <=e ;idx++){ + array[idx] = temp[k++]; + } + return ans; +} + +long long mergesort(vector &arr,int s,int e){ + if(s>=e){ + return 0; + } + int mid = (s+e)/2; + long long ans=0; + ans+=mergesort(arr,s,mid); + ans+=mergesort(arr,mid+1,e); + ans+=merge(arr,s,e); + return ans; +} + +int main() { + int n; + cin>>n; + vectora(n); + for(int i = 0; i < n; i++){ + cin>>a[i]; + } + cout< + +using namespace std; + + +vector findMinTime(int numTasks, map>& taskGraph) { + vector taskTimes(numTasks + 1, 0); + vector incomingCounts(numTasks + 1, 0); + queue readyTasks; + + for (int task = 1; task <= numTasks; ++task) { + for (int dep : taskGraph[task]) { + incomingCounts[dep]++; + } + } + + for (int task = 1; task <= numTasks; ++task) { + if (incomingCounts[task] == 0) { + readyTasks.push(task); + taskTimes[task] = 1; + } + } + + while (!readyTasks.empty()) { + int currentTask = readyTasks.front(); + readyTasks.pop(); + + for (int dependentTask : taskGraph[currentTask]) { + incomingCounts[dependentTask]--; + if (incomingCounts[dependentTask] == 0) { + readyTasks.push(dependentTask); + taskTimes[dependentTask] = taskTimes[currentTask] + 1; + } + } + } + + taskTimes.erase(taskTimes.begin()); + return taskTimes; +} + +int main() { + int numTasks; + cout << "Enter the number of tasks: "; + cin >> numTasks; + + vector tasks(numTasks); + cout << "Enter the tasks: "; + for (int& task : tasks) { + cin >> task; + } + + map> taskGraph; + cout << "Enter the dependencies: "; + for (int i = 0; i < numTasks; ++i) { + int dependentTask; + vector dependencies; + + cin >> dependentTask; + while (cin.peek() != '\n') { + int dependency; + cin >> dependency; + dependencies.push_back(dependency); + } + + taskGraph[dependentTask] = dependencies; + } + + vector minTimes = findMinTime(numTasks, taskGraph); + + cout << *max_element(minTimes.begin(), minTimes.end()); + + return 0; +} diff --git a/December 26/c++_moni-08.cpp b/December 26/c++_moni-08.cpp new file mode 100644 index 0000000..465aa44 --- /dev/null +++ b/December 26/c++_moni-08.cpp @@ -0,0 +1,57 @@ +#include +using namespace std; + +struct Node +{ + int data; + Node* next; + + Node(int val) + { + data = val; + next = NULL; + } +}; + + +bool detectLoop(Node* head){ + Node* slow = head, *fast = head; + + while(fast!=NULL && fast->next!=NULL){ + fast = fast->next->next; + slow = slow->next; + if(fast == slow){ + return true; + } + } + return false; +} + + +int main(){ + int n, num; + cin>>n; + vector v; + Node *head, *tail; + cin>> num; + head = tail = new Node(num); + v.push_back(num); + for(int i=0 ; i> num; + auto it = std::find(v.begin(), v.end(), num); + if (it != v.end()) { + Node* walk = head; + for(int i=0; inext; + tail->next = walk; + } else { + tail->next = new Node(num); + tail = tail->next; + v.push_back(num); + } + } + + if(detectLoop(head)) cout<< "Cycle Found"; + else cout<< "No Cycle Found"; + return 0; +} diff --git a/December 27/c++_moni-08.cpp b/December 27/c++_moni-08.cpp new file mode 100644 index 0000000..fcc9456 --- /dev/null +++ b/December 27/c++_moni-08.cpp @@ -0,0 +1,34 @@ +#include +using namespace std; + +int tour(vector> p,int n) + { + int prev_petrol = 0, curr_petrol = 0, start = 0; + for(int i=0; i0?start+1:-1; + } + +int main() +{ + int n; + cout << "Enter the No. of petrol pump: "; + cin>>n; + vector> p (n, vector(n, 0)); + cout << "Enter the petrol: "; + for(int i=0;i>p[i][0]; + } + cout << "Enter the distance: "; + for(int i=0;i>p[i][1]; + } + cout< + +using namespace std; + +struct Item { + int k, r, m, n; +}; + +struct Client { + int k, r; +}; + +bool compareItems(const Item& a, const Item& b) { + return a.m > b.m; +} + +bool compareClients(const Client& a, const Client& b) { + return a.k < b.k; + +int maxGadgetsSold(int x, int z, vector& items, vector& clients) { + sort(items.begin(), items.end(), compareItems); + sort(clients.begin(), clients.end(), compareClients); + + int gadgetsSold = 0; + vector itemSold(x, false); + + for (int i = 0; i < z; ++i) { + for (int j = 0; j < x; ++j) { + if (!itemSold[j] && items[j].m > clients[i].k && items[j].n <= clients[i].r) { + itemSold[j] = true; + gadgetsSold++; + break; + } + } + } + + return gadgetsSold; +} + +int main() { + int x, z; + cin >> x >> z; + + vector items(x); + vector clients(z); + + for (int i = 0; i < x; ++i) { + cin >> items[i].k >> items[i].r >> items[i].m >> items[i].n; + } + + for (int i = 0; i < z; ++i) { + cin >> clients[i].k >> clients[i].r; + } + + int result = maxGadgetsSold(x, z, items, clients); + cout << "Output: " << result << endl; + + return 0; +} diff --git a/December 29/c++_moni-08.cpp b/December 29/c++_moni-08.cpp new file mode 100644 index 0000000..26a5626 --- /dev/null +++ b/December 29/c++_moni-08.cpp @@ -0,0 +1,32 @@ +#include + +using namespace std; + +bool walk(vector v){ + int n = 0, s = 0, w = 0, e = 0; + for(auto c : v){ + if(c == 'n') n++; + else if(c == 'w') w++; + else if(c == 's') s++; + else if(c == 'e') e++; + else return false; + } + if(v.size() == 10 && n == s && w == e) return true; + return false; +} + +int main() { + int n; + cout << "Enter the no. of directions: "; + cin >> n; + vector v; + cout << "Enter the directions: "; + for(int i = 0; i> a; + v.push_back(a); + } + if(walk(v)) cout << "TRUE"; + else cout << "FALSE"; + return 0; +} diff --git a/December 30/c++_moni-08.cpp b/December 30/c++_moni-08.cpp new file mode 100644 index 0000000..1a3ae85 --- /dev/null +++ b/December 30/c++_moni-08.cpp @@ -0,0 +1,164 @@ +#include + +using namespace std; + +const int MN = 1e5 + 7; +vector adj[MN]; +int a[MN], tin[MN], f[20][MN], dp[MN], timer; + +struct Query { + int l, r, idx; + Query(int l = 0, int r = 0, int idx = 0) : l(l), r(r), idx(idx) {} +}; + +void dfs(int u, int p) { + tin[u] = ++timer; + dp[u] = dp[p] + 1, f[0][u] = p; + + for (int i = 1; i < 18; i++) + f[i][u] = f[i - 1][f[i - 1][u]]; + + for (auto v : adj[u]) + if (v != p) + dfs(v, u); + + ++timer; +} + +int lca(int u, int v) { + if (dp[u] < dp[v]) + swap(u, v); + + for (int i = 0, diff = dp[u] - dp[v]; (1 << i) <= diff; i++) + if (diff >> i & 1) + u = f[i][u]; + + if (u == v) + return u; + + for (int i = 31 - __builtin_clz(dp[u]); i >= 0; i--) + if (f[i][u] != f[i][v]) + u = f[i][u], v = f[i][v]; + + return f[0][u]; +} + +void processMove(int u, int v, int tv, long long& val, vector& cnt, long long& len) { + auto processAdd = [&](int u) { + val += len - cnt[a[u]]; + cnt[a[u]]++; + len++; + }; + + auto processRmv = [&](int u) { + val -= len - cnt[a[u]]; + cnt[a[u]]--; + len--; + }; + + auto processRio = [&](int u, int v, bool flag) { + int ans = lca(u, v); + while (u != ans) { + if (flag) { + processAdd(u); + } else { + processRmv(u); + } + u = f[0][u]; + } + while (v != ans) { + v = f[0][v]; + if (flag) { + processAdd(v); + } else { + processRmv(v); + } +} + }; + + if (tv == -1) { + int ans = lca(u, v); + while (u != ans || v != ans) { + if (u != ans) { + processAdd(u); + u = f[0][u]; + } + if (v != ans) { + processAdd(v); + v = f[0][v]; + } + } + + + processAdd(ans); + } else { + int pants = lca(v, tv), ans = lca(u, v); + int calc = (dp[pants] < dp[ans]) ? ans : (ans == pants ? lca(tv, u) : pants); + processRio(tv, calc, 1); + processRio(v, calc, 0); + } +} + +vector processQueries(int n, int q, const vector& queries) { + int L = sqrt(n + 1.0) + 2; + vector ans(q + 1); + + for (int i = 0; i <= L * 2; i++) { + long long val = 0, len = 0; + vector cnt(n + 1, 0); + int st = -1, en = -1; + + for (const auto& query : queries) { + int u = query.l, v = query.r; + + if (st == -1) + processMove(u, v, st, val, cnt, len); + else + processMove(st, en, v, val, cnt, len), processMove(v, st, u, val, cnt, len); + + ans[query.idx] = val; + st = u, en = v; + } + } + + return ans; +} + +int main() { + int T; + cin >> T; + + while (T--) { + int n, q; + cin >> n >> q; + + for (int i = 1; i <= n; i++) + adj[i].clear(), timer = 0; + + for (int i = 1; i <= n; i++) + cin >> a[i]; + + for (int i = 1; i < n; i++) { + int u, v; + cin >> u >> v; + adj[u].push_back(v); + adj[v].push_back(u); + } + + dfs(1, 0); + vector queries; + + for (int i = 0; i < q; i++) { + int u, v; + cin >> u >> v; + queries.emplace_back(u, v, i); + } + + vector ans = processQueries(n, q, queries); + + for (int i = 0; i < q; i++) + cout << ans[i] << '\n'; + } + + return 0; +} diff --git a/December 31/c++_moni-08.cpp b/December 31/c++_moni-08.cpp new file mode 100644 index 0000000..b545fb6 --- /dev/null +++ b/December 31/c++_moni-08.cpp @@ -0,0 +1,76 @@ +#include +using namespace std; + +bool safe(int row,int col,vector> board,int n){ + int drow=row; + int dcol=col; + + while(dcol>=0){ + if(board[drow][dcol]==1) return false; + dcol--; + } + dcol=col; + + while(drow>=0 && dcol>=0){ + if(board[drow][dcol]==1) return false; + dcol--; + drow--; + } + drow=row; + dcol=col; + + while(drow=0){ + if(board[drow][dcol]==1) return false; + drow++; + dcol--; + } + return true; +} + +void solve(int col , int n , vector> board , vector> &ans){ + if(col == n){ + vector temp; + for(int col=0;col> nQueen(int n){ + vector> ans; + vector> board(n,vector(n,0)); + solve(0,n,board,ans); + return ans; +} + +int main(){ + int n; + cin>>n; + + vector> ans = nQueen(n); + if(ans.size() == 0) + cout<<-1<<"\n"; + else { + for(int i = 0;i < ans.size();i++){ + for(int u = 0;u < ans[i].size();u++) + cout<<"(" << u+1 << ", " << ans[i][u] <<") "; + cout<<"\n"; + } + cout<