Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 14 / task6.cpp
diff options
context:
space:
mode:
1 files changed, 42 insertions, 0 deletions
-rw-r--r--Sem. 14/task6.cpp42
diff --git a/Sem. 14/task6.cpp b/Sem. 14/task6.cpp
new file mode 100644
index 0000000..f389bcf
--- /dev/null
+++ b/Sem. 14/task6.cpp
@@ -0,0 +1,42 @@
+#include <iostream>
+using namespace std;
+
+
+
+
+bool canBeCovered(int n, int m)
+{
+ if ((n == 0 && m >= 0) || (n>=0 && m==0)) //empty rectangle can be covered
+ return true;
+
+ if (n < 0 || m < 0) //out of range
+ return false;
+
+ if ((n == 1 && m == 2) || (n == 3 && m == 1)) //exactly one 1x2 or 3x1
+ return true;
+
+ if ((n == 1 && m == 1) || (n == 2 && m == 1)) // to swall for our plates
+ return false;
+
+
+
+ //if the plate 2x1 stands in the top left corner
+ bool case1 = (m >=2 && canBeCovered(n - 1, 2) && canBeCovered(n, m - 2)) //try cut vertically
+ || (n>=1 && canBeCovered(n-1, m) && canBeCovered(1, m-2)); //try cut horizontaly
+
+ if (case1)
+ return true;
+
+ //if the plate 1x3 stands in the top left corner
+ bool case2 = (m >= 1 && canBeCovered(n - 3, 1) && canBeCovered(n, m - 1)) //try cut vertically
+ || (n>=3 && canBeCovered(3, m - 1) && canBeCovered(n - 3, m)); //try cut horizontaly
+
+ return case2;
+}
+int main()
+{
+ int n, m;
+
+
+ cout << canBeCovered(4, 3);
+} \ No newline at end of file