Advertisement
juanjo12x

UVA_10855_Rotated_Square

Aug 10th, 2014
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.80 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <string>
  6. #include <cctype>
  7. #include <stack>
  8. #include <queue>
  9. #include <list>
  10. #include <vector>
  11. #include <map>
  12. #include <set>
  13. #include <sstream>
  14. #include <stdlib.h>
  15. #include <cmath>
  16. #define LL unsigned long long
  17. using namespace std;
  18.  
  19. int N,n;
  20. char M[100][100];char m[100][100];
  21. char m1[100][100];char m2[100][100];char m3[100][100];
  22. void rotar_90(){
  23.     for(int l=n-1,i=0;l>=0 && i<n;l--,i++){
  24.      for(int k=0,j=0;k<n && j<n;k++,j++){
  25.                 m1[k][l]=m[i][j];
  26.         }
  27.     }
  28.    
  29. }
  30. void rotar_180(){
  31.     for(int l=n-1,i=0;l>=0 && i<n;l--,i++){
  32.      for(int k=0,j=0;k<n && j<n;k++,j++){
  33.                 m2[k][l]=m1[i][j];
  34.         }
  35.     }
  36.    
  37. }
  38. void rotar_270(){
  39.     for(int l=n-1,i=0;l>=0 && i<n;l--,i++){
  40.      for(int k=0,j=0;k<n && j<n;k++,j++){
  41.                 m3[k][l]=m2[i][j];
  42.         }
  43.     }
  44.    
  45. }
  46. int main() {
  47.  
  48.     while(scanf("%d %d",&N,&n)){
  49.         if(N==0 && n==0) break;
  50.         getchar();
  51.         for (int i=0;i<N;i++){
  52.             for(int j=0;j<N;j++){
  53.                 scanf("%c",&M[i][j]);
  54.             }
  55.             getchar();
  56.         }
  57.         for(int i=0;i<n;i++){
  58.             for(int j=0;j<n;j++){
  59.                 scanf("%c",&m[i][j]);
  60.             }
  61.             getchar();
  62.         }
  63.         rotar_90();rotar_180();rotar_270();
  64.         /*compruebo para cada 1*/
  65.         int c1=0;int c2=0; int c3=0;int c4=0;
  66.         for(int i=0;i<N;i++){
  67.             for(int j=0;j<N;j++){
  68.                 if ( M [i] [j] == m [0] [0] ) {
  69.                 if ( i + n > N || j + n > N )
  70.                     continue;
  71.                 bool flag = true;
  72.                 for ( int k = 0; k < n; k++ ) {
  73.                     for ( int l = 0; l < n; l++ ) {
  74.                         if ( m [k] [l] != M [i + k] [j + l] ) {
  75.                             flag = false;
  76.                             k = l = n;
  77.                         }
  78.                     }
  79.                 }
  80.  
  81.                 if ( flag )
  82.                 c1++;
  83.                }
  84.             }
  85.         }
  86.          for(int i=0;i<N;i++){
  87.             for(int j=0;j<N;j++){
  88.                 if ( M[i][j] == m1[0][0] ) {
  89.                 if ( i + n > N || j + n > N )
  90.                     continue;
  91.                 bool flag = true;
  92.                 for ( int k = 0; k < n; k++ ) {
  93.                     for ( int l = 0; l < n; l++ ) {
  94.                         if ( m1 [k] [l] != M [i + k] [j + l] ) {
  95.                             flag = false;
  96.                             k = l = n;
  97.                         }
  98.                     }
  99.                 }
  100.  
  101.                 if ( flag )
  102.                 c2++;
  103.                }
  104.             }
  105.         }
  106.          for(int i=0;i<N;i++){
  107.             for(int j=0;j<N;j++){
  108.                 if ( M[i][j] == m2[0][0] ) {
  109.                 if ( i + n > N || j + n > N )
  110.                     continue;
  111.                 bool flag = true;
  112.                 for ( int k = 0; k < n; k++ ) {
  113.                     for ( int l = 0; l < n; l++ ) {
  114.                         if ( m2 [k] [l] != M [i + k] [j + l] ) {
  115.                             flag = false;
  116.                             k = l = n;
  117.                         }
  118.                     }
  119.                 }
  120.  
  121.                 if ( flag )
  122.                 c3++;
  123.                }
  124.             }
  125.         }
  126.          for(int i=0;i<N;i++){
  127.             for(int j=0;j<N;j++){
  128.                 if ( M[i][j] == m3[0][0] ) {
  129.                 if ( i + n > N || j + n > N )
  130.                     continue;
  131.                 bool flag = true;
  132.                 for ( int k = 0; k < n; k++ ) {
  133.                     for ( int l = 0; l < n; l++ ) {
  134.                         if ( m3 [k] [l] != M [i + k] [j + l] ) {
  135.                             flag = false;
  136.                             k = l = n;
  137.                         }
  138.                     }
  139.                 }
  140.  
  141.                 if ( flag )
  142.                 c4++;
  143.                }
  144.             }
  145.         }
  146.         printf("%d %d %d %d\n",c1,c2,c3,c4);
  147.     }
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement