Advertisement
Josif_tepe

Untitled

Nov 24th, 2024
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. #include <cmath>
  5. //#include <bits/stdc++.h>
  6. #include <map>
  7. using namespace std;
  8.  
  9.  
  10. int main() {
  11. ios_base::sync_with_stdio(false);
  12. int n, k;
  13. cin >> n >> k;
  14.  
  15. unordered_map<string, bool> mapa;
  16.  
  17. vector<string> v(k);
  18. for(int i = 0; i < k; i++) {
  19. cin >> v[i];
  20. mapa[v[i]] = true;
  21. }
  22.  
  23. long long res = 0;
  24. if(n == 6) {
  25. for(int a = 0; a < k; a++) {
  26. for(int b = a + 1; b < k; b++) {
  27. for(int c = b + 1; c < k; c++) {
  28. for(int d = c + 1; d < k; d++) {
  29. for(int e = d + 1; e < k; e++) {
  30. for(int f = e + 1; f < k; f++) {
  31. vector<string> crossword(n);
  32. crossword[0] = v[a];
  33. crossword[1] = v[b];
  34. crossword[2] = v[c];
  35. crossword[3] = v[d];
  36. crossword[4] = v[e];
  37. crossword[5] = v[f];
  38.  
  39. int cnt = 0;
  40. for(int i = 0; i < n; i++) {
  41. string word = "";
  42. for(int j = 0; j < n; j++) {
  43. word += crossword[i][j];
  44. }
  45. if(mapa[word]) {
  46. cnt++;
  47. }
  48. if(cnt >= 2 * n) {
  49. res++;
  50. // for(int x = 0; x < n; x++) {
  51. //// for(int y = 0; y < n; y++) {
  52. //// cout << crossword[x][y];
  53. //// }
  54. //// cout << endl;
  55. //// }
  56. break;
  57. }
  58. word = "";
  59. for(int j = n - 1; j >= 0; j--) {
  60. word += crossword[i][j];
  61.  
  62. }
  63. if(mapa[word]) {
  64. cnt++;
  65. }
  66. if(cnt >= 2 * n) {
  67. res++;
  68. // for(int x = 0; x < n; x++) {
  69. // for(int y = 0; y < n; y++) {
  70. // cout << crossword[x][y];
  71. // }
  72. // cout << endl;
  73. // }
  74. break;
  75. }
  76. word = "";
  77. for(int j = 0; j < n; j++) {
  78. word += crossword[j][i];
  79. }
  80. if(mapa[word]) {
  81. cnt++;
  82.  
  83. }
  84. if(cnt >= 2 * n) {
  85. res++;
  86. // for(int x = 0; x < n; x++) {
  87. // for(int y = 0; y < n; y++) {
  88. // cout << crossword[x][y];
  89. // }
  90. // cout << endl;
  91. // }
  92. break;
  93. }
  94. word = "";
  95. for(int j = n - 1; j >= 0; j--) {
  96. word += crossword[j][i];
  97. }
  98. if(mapa[word]) {
  99. cnt++;
  100. }
  101. if(cnt >= 2 * n) {
  102. res++;
  103. // for(int x = 0; x < n; x++) {
  104. // for(int y = 0; y < n; y++) {
  105. // cout << crossword[x][y];
  106. // }
  107. // cout << endl;
  108. // }
  109. break;
  110. }
  111.  
  112.  
  113.  
  114.  
  115. }
  116. }
  117. }
  118. }
  119. }
  120. }
  121. }
  122. }
  123. else if(n == 3) {
  124. for(int a = 0; a < k; a++) {
  125. for(int b = a + 1; b < k; b++) {
  126. for(int c = b + 1; c < k; c++) {
  127. vector<string> crossword(n);
  128. crossword[0] = v[a];
  129. crossword[1] = v[b];
  130. crossword[2] = v[c];
  131.  
  132. int cnt = 0;
  133. for(int i = 0; i < n; i++) {
  134. string word = "";
  135. for(int j = 0; j < n; j++) {
  136. word += crossword[i][j];
  137. }
  138. if(mapa[word]) {
  139. cnt++;
  140. }
  141. if(cnt >= 2 * n) {
  142. res++;
  143. // for(int x = 0; x < n; x++) {
  144. //// for(int y = 0; y < n; y++) {
  145. //// cout << crossword[x][y];
  146. //// }
  147. //// cout << endl;
  148. //// }
  149. break;
  150. }
  151. word = "";
  152. for(int j = n - 1; j >= 0; j--) {
  153. word += crossword[i][j];
  154.  
  155. }
  156. if(mapa[word]) {
  157. cnt++;
  158. }
  159. if(cnt >= 2 * n) {
  160. res++;
  161. // for(int x = 0; x < n; x++) {
  162. // for(int y = 0; y < n; y++) {
  163. // cout << crossword[x][y];
  164. // }
  165. // cout << endl;
  166. // }
  167. break;
  168. }
  169. word = "";
  170. for(int j = 0; j < n; j++) {
  171. word += crossword[j][i];
  172. }
  173. if(mapa[word]) {
  174. cnt++;
  175.  
  176. }
  177. if(cnt >= 2 * n) {
  178. res++;
  179. // for(int x = 0; x < n; x++) {
  180. // for(int y = 0; y < n; y++) {
  181. // cout << crossword[x][y];
  182. // }
  183. // cout << endl;
  184. // }
  185. break;
  186. }
  187. word = "";
  188. for(int j = n - 1; j >= 0; j--) {
  189. word += crossword[j][i];
  190. }
  191. if(mapa[word]) {
  192. cnt++;
  193. }
  194. if(cnt >= 2 * n) {
  195. res++;
  196. // for(int x = 0; x < n; x++) {
  197. // for(int y = 0; y < n; y++) {
  198. // cout << crossword[x][y];
  199. // }
  200. // cout << endl;
  201. // }
  202. break;
  203. }
  204.  
  205. }
  206. }
  207. }
  208. }
  209. }
  210. else if(n == 5) {
  211. for(int a = 0; a < k; a++) {
  212. for(int b = a + 1; b < k; b++) {
  213. for(int c = b + 1; c < k; c++) {
  214. for(int d = c + 1; d < k; d++) {
  215. for(int e = d + 1; e < k; e++) {
  216.  
  217.  
  218. vector<string> crossword(n);
  219. crossword[0] = v[a];
  220. crossword[1] = v[b];
  221. crossword[2] = v[c];
  222. crossword[3] = v[d];
  223. crossword[4] = v[e];
  224.  
  225. int cnt = 0;
  226. for(int i = 0; i < n; i++) {
  227. string word = "";
  228. for(int j = 0; j < n; j++) {
  229. word += crossword[i][j];
  230. }
  231. if(mapa[word]) {
  232. cnt++;
  233. }
  234. if(cnt >= 2 * n) {
  235. res++;
  236. // for(int x = 0; x < n; x++) {
  237. //// for(int y = 0; y < n; y++) {
  238. //// cout << crossword[x][y];
  239. //// }
  240. //// cout << endl;
  241. //// }
  242. break;
  243. }
  244. word = "";
  245. for(int j = n - 1; j >= 0; j--) {
  246. word += crossword[i][j];
  247.  
  248. }
  249. if(mapa[word]) {
  250. cnt++;
  251. }
  252. if(cnt >= 2 * n) {
  253. res++;
  254. // for(int x = 0; x < n; x++) {
  255. // for(int y = 0; y < n; y++) {
  256. // cout << crossword[x][y];
  257. // }
  258. // cout << endl;
  259. // }
  260. break;
  261. }
  262. word = "";
  263. for(int j = 0; j < n; j++) {
  264. word += crossword[j][i];
  265. }
  266. if(mapa[word]) {
  267. cnt++;
  268.  
  269. }
  270. if(cnt >= 2 * n) {
  271. res++;
  272. // for(int x = 0; x < n; x++) {
  273. // for(int y = 0; y < n; y++) {
  274. // cout << crossword[x][y];
  275. // }
  276. // cout << endl;
  277. // }
  278. break;
  279. }
  280. word = "";
  281. for(int j = n - 1; j >= 0; j--) {
  282. word += crossword[j][i];
  283. }
  284. if(mapa[word]) {
  285. cnt++;
  286. }
  287. if(cnt >= 2 * n) {
  288. res++;
  289. // for(int x = 0; x < n; x++) {
  290. // for(int y = 0; y < n; y++) {
  291. // cout << crossword[x][y];
  292. // }
  293. // cout << endl;
  294. // }
  295. break;
  296. }
  297. }
  298. }
  299.  
  300. }
  301. }
  302. }
  303. }
  304. for(int a = 0; a < k; a++) {
  305. for(int b = a + 1; b < k; b++) {
  306. for(int c = b + 1; c < k; c++) {
  307. for(int d = c + 1; d < k; d++) {
  308. for(int e = d + 1; e < k; e++) {
  309.  
  310.  
  311. vector<string> crossword(n, "wwwww");
  312.  
  313. for(int j = 0; j < n; j++) {
  314. crossword[0][j] = v[a][j];
  315. }
  316. for(int j = 0; j < n; j++) {
  317. crossword[1][j] = v[b][j];
  318. }
  319. for(int j = 0; j < n; j++) {
  320. crossword[2][j] = v[c][j];
  321. }
  322. for(int j = 0; j < n; j++) {
  323. crossword[3][j] = v[d][j];
  324. }
  325. for(int j = 0; j < n; j++) {
  326. crossword[4][j] = v[e][j];
  327.  
  328. }
  329.  
  330.  
  331. int cnt = 0;
  332. for(int i = 0; i < n; i++) {
  333. string word = "";
  334. for(int j = 0; j < n; j++) {
  335. word += crossword[i][j];
  336. }
  337. if(mapa[word]) {
  338. cnt++;
  339. }
  340. if(cnt >= 2 * n) {
  341. res++;
  342. // for(int x = 0; x < n; x++) {
  343. //// for(int y = 0; y < n; y++) {
  344. //// cout << crossword[x][y];
  345. //// }
  346. //// cout << endl;
  347. //// }
  348. break;
  349. }
  350. word = "";
  351. for(int j = n - 1; j >= 0; j--) {
  352. word += crossword[i][j];
  353.  
  354. }
  355. if(mapa[word]) {
  356. cnt++;
  357. }
  358. if(cnt >= 2 * n) {
  359. res++;
  360. // for(int x = 0; x < n; x++) {
  361. // for(int y = 0; y < n; y++) {
  362. // cout << crossword[x][y];
  363. // }
  364. // cout << endl;
  365. // }
  366. break;
  367. }
  368. word = "";
  369. for(int j = 0; j < n; j++) {
  370. word += crossword[j][i];
  371. }
  372. if(mapa[word]) {
  373. cnt++;
  374.  
  375. }
  376. if(cnt >= 2 * n) {
  377. res++;
  378. // for(int x = 0; x < n; x++) {
  379. // for(int y = 0; y < n; y++) {
  380. // cout << crossword[x][y];
  381. // }
  382. // cout << endl;
  383. // }
  384. break;
  385. }
  386. word = "";
  387. for(int j = n - 1; j >= 0; j--) {
  388. word += crossword[j][i];
  389. }
  390. if(mapa[word]) {
  391. cnt++;
  392. }
  393. if(cnt >= 2 * n) {
  394. res++;
  395. // for(int x = 0; x < n; x++) {
  396. // for(int y = 0; y < n; y++) {
  397. // cout << crossword[x][y];
  398. // }
  399. // cout << endl;
  400. // }
  401. break;
  402. }
  403. }
  404. }
  405.  
  406. }
  407. }
  408. }
  409. }
  410.  
  411.  
  412. }
  413. cout << res << endl;
  414.  
  415. return 0;
  416. }
  417.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement