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 | #include <iostream> #include <string> #include <sstream> #include <limits> using namespace std; void str_to_map(bool** map, string arg0, size_t size, int y); bool** array_builder_2d(size_t size); void release_pointer_2d(bool** target, size_t target_size); string sol(bool** const bg, bool** const target, size_t bg_size, size_t target_size); void clear_cin() { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } template<typename T> string to_string(T a) { string result; stringstream ss(result); ss << a; return ss.str(); } int main() { size_t bg_size, target_size; string buffer; cin >> bg_size; clear_cin(); bool** map = array_builder_2d(bg_size); for (int i=0; i<bg_size; i++) { getline(cin, buffer); str_to_map(map, buffer, bg_size, i); } cin >> target_size; clear_cin(); bool** pattern = array_builder_2d(target_size); for (int i=0; i<target_size; i++) { getline(cin, buffer); str_to_map(pattern, buffer, target_size, i); } cout << sol(map, pattern, bg_size, target_size); release_pointer_2d(map, bg_size); release_pointer_2d(pattern, target_size); return 0; } void str_to_map(bool** map, string arg0, size_t size,int y) { for (int x=0; x<size*2-1; x++) { if (arg0[x] == ' ') continue; map[(x+1)/2][y] = (arg0[x] == '0')? 0: 1; } } bool** array_builder_2d(size_t size) { bool** map = new bool* [size]; for (int i=0; i<size; i++) { map[i] = new bool[size]; } return map; } void release_pointer_2d(bool** target, size_t target_size) { for (int y=0; y<target_size; y++) { delete[] target[y]; } delete[] target; target = nullptr; } string sol(bool** const bg, bool** const target, size_t bg_size, size_t target_size) { for (int bg_y=0; bg_y<bg_size; bg_y++) { for (int bg_x=0; bg_x<bg_size; bg_x++) { if (bg[bg_x][bg_y]!=target[0][0]) continue; else { bool flag = 1; for (int target_y=0; target_y<target_size&&flag==1; target_y++) { for (int target_x=0; target_x<target_size&&flag==1; target_x++) { if (bg_x+target_x>=bg_size || bg_y+target_y>=bg_size) { flag = 0; break; } if (target[target_x][target_y] != bg[bg_x+target_x][bg_y+target_y]) flag = 0; } } if (flag==1) return to_string(bg_y) + " " + to_string(bg_x); } } } return ""; } |
Direct link: https://paste.plurk.com/show/2324574