diff --git a/C++/Matrix Probability.cpp b/C++/Matrix Probability.cpp new file mode 100644 index 0000000..d96ef8a --- /dev/null +++ b/C++/Matrix Probability.cpp @@ -0,0 +1,67 @@ +/// C++ program to find the probability +// that we do not cross boundary of a +// matrix after N moves. +#include +using namespace std; + +// check if (x, y) is valid matrix coordinate +bool isSafe(int x, int y, int m, int n) +{ + return (x >= 0 && x < m && + y >= 0 && y < n); +} + +// Function to calculate probability +// that after N moves from a given +// position (x, y) in m x n matrix, +// boundaries of the matrix will not be crossed. +double findProbability(int m, int n, int x, + int y, int N) +{ + // boundary crossed + if (!isSafe(x, y, m, n)) + return 0.0; + + // N steps taken + if (N == 0) + return 1.0; + + // Initialize result + double prob = 0.0; + + // move up + prob += findProbability(m, n, x - 1, + y, N - 1) * 0.25; + + // move right + prob += findProbability(m, n, x, + y + 1, N - 1) * 0.25; + + // move down + prob += findProbability(m, n, x + 1, + y, N - 1) * 0.25; + + // move left + prob += findProbability(m, n, x, + y - 1, N - 1) * 0.25; + + return prob; +} + +// Driver code +int main() +{ + // matrix size + int m = 5, n = 5; + + // coordinates of starting point + int i = 1, j = 1; + + // Number of steps + int N = 2; + + cout << "Probability is " + << findProbability(m, n, i, j, N); + + return 0; +} \ No newline at end of file diff --git a/C++/New Text Document (2).txt b/C++/New Text Document (2).txt new file mode 100644 index 0000000..e69de29 diff --git a/C++/New Text Document.txt b/C++/New Text Document.txt new file mode 100644 index 0000000..e69de29 diff --git a/C++/distinct palindrome sub-strings.cpp b/C++/distinct palindrome sub-strings.cpp new file mode 100644 index 0000000..69dd828 --- /dev/null +++ b/C++/distinct palindrome sub-strings.cpp @@ -0,0 +1,75 @@ +// C++ program to find all distinct palindrome sub-strings +// of a given string +#include +#include +using namespace std; + +// Function to print all distinct palindrome sub-strings of s +void palindromeSubStrs(string s) +{ + map m; + int n = s.size(); + + // table for storing results (2 rows for odd- + // and even-length palindromes + int R[2][n+1]; + + // Find all sub-string palindromes from the given input + // string insert 'guards' to iterate easily over s + s = "@" + s + "#"; + + for (int j = 0; j <= 1; j++) + { + int rp = 0; // length of 'palindrome radius' + R[j][0] = 0; + + int i = 1; + while (i <= n) + { + // Attempt to expand palindrome centered at i + while (s[i - rp - 1] == s[i + j + rp]) + rp++; // Incrementing the length of palindromic + // radius as and when we find vaid palindrome + + // Assigning the found palindromic length to odd/even + // length array + R[j][i] = rp; + int k = 1; + while ((R[j][i - k] != rp - k) && (k < rp)) + { + R[j][i + k] = min(R[j][i - k],rp - k); + k++; + } + rp = max(rp - k,0); + i += k; + } + } + + // remove 'guards' + s = s.substr(1, n); + + // Put all obtained palindromes in a hash map to + // find only distinct palindromess + m[string(1, s[0])]=1; + for (int i = 1; i <= n; i++) + { + for (int j = 0; j <= 1; j++) + for (int rp = R[j][i]; rp > 0; rp--) + m[s.substr(i - rp - 1, 2 * rp + j)]=1; + m[string(1, s[i])]=1; + } + + //printing all distinct palindromes from hash map + cout << "Below are " << m.size()-1 + << " palindrome sub-strings"; + map::iterator ii; + for (ii = m.begin(); ii!=m.end(); ++ii) + cout << (*ii).first << endl; +} + +// Driver program +int main() +{ + palindromeSubStrs("abaaa"); + return 0; +} \ No newline at end of file