#include <bits/stdc++.h> using namespace std; struct shiftLimit { int up, down, left, right; }; bool check(int shift, int max) { return (shift >= 0 && shift < max); } int main() { int n, k; cin >> n >> k; vector<vector<bool>> original(n, vector<bool>(n)); vector<vector<vector<bool>>> pieces(k, vector<vector<bool>>(n, vector<bool>(n))); vector<shiftLimit> borders(k); char temp; for(int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> temp; original[i][j] = (temp == '#'); } } for(int l = 0; l < k; l++) { int minRow = n - 1; int minCol = n - 1; int maxRow = 0; int maxCol = 0; for(int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> temp; pieces[l][i][j] = (temp == '#'); if(pieces[l][i][j]) { minRow = min(minRow, i); minCol = min(minCol, j); maxRow = max(maxRow, i); maxCol = max(maxCol, j); } } } shiftLimit s; s.up = minRow; s.down = (n - 1) - maxRow; s.left = minCol; s.right = (n - 1) - maxCol; borders[l] = s; } // for(auto l : borders) { // cout << l.up << " " << l.down << " " << l.left << " " << l.right << endl; // } // brute force each pair for(int i = 0; i < k; i++) { // every possible shift for i for(int ix = -borders[i].left; ix <= borders[i].right; ix++) { for(int iy = -borders[i].up; iy <= borders[i].down; iy++) { // second piece for(int j = i + 1; j < k; j++) { for(int jx = -borders[j].left; jx <= borders[j].right; jx++) { for(int jy = -borders[j].up; jy <= borders[j].down; jy++) { // cout << "i: " << i << ", j: " << j << endl; // cout << "ix: " << ix << ", iy: " << iy << endl; // cout << "jx: " << jx << ", jy: " << jy << endl; bool works = true; // check every tile for(int t = 0; t < n; t++) { for(int r = 0; r < n; r++) { if(original[t][r]) { // bool iWorks = (t - iy >= 0 && t - ix < n && pieces[i][t - iy][r - ix]); // bool jWorks = (t - jy >= 0 && t - jx < n && pieces[j][t - jy][r - jx]); bool iWorks = (check(t - iy, n) && check(r - ix, n) && pieces[i][t - iy][r - ix]); bool jWorks = (check(t - jy, n) && check(r - jx, n) && pieces[j][t - jy][r - jx]); if(iWorks && jWorks) { // cout << t << " " << r << endl << endl; works = false; break; } else if(!(iWorks || jWorks)) { // cout << t << " " << r << endl << endl;; works = false; break; } } } if(!works) break; } if(works) { cout << i + 1 << " " << j + 1; return 0; } } } } } } } }
Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++
and start coding!
OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "Enter name:";
getline (cin, name);
cout << "Hello " << name;
return 0;
}
C++ is a widely used middle-level programming language.
When ever you want to perform a set of operations based on a condition If-Else is used.
if(conditional-expression) {
//code
}
else {
//code
}
You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.
Switch is an alternative to If-Else-If ladder.
switch(conditional-expression){
case value1:
// code
break; // optional
case value2:
// code
break; // optional
......
default:
code to be executed when all the above cases are not matched;
}
For loop is used to iterate a set of statements based on a condition.
for(Initialization; Condition; Increment/decrement){
//code
}
While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.
while (condition) {
// code
}
Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.
do {
// code
} while (condition);
Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.
return_type function_name(parameters);
function_name (parameters)
return_type function_name(parameters) {
// code
}