karlangadas

Rotated Squares

Dec 9th, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. char big[10000][10000];
  4. char small[10000][10000];
  5. char smallaux[10000][10000];
  6. int iguales(int nbig,int nsmall,int i1,int j1){
  7.     for(int i=i1,k=0;i<(i1+nsmall),k<nsmall;i++,k++)
  8.             for(int j=j1,l=0;j<(j1+nsmall),l<nsmall;j++,l++)
  9.                 if (big[i][j]!=small[k][l])
  10.                     return 0;
  11.        
  12. return 1;
  13. }
  14. void rotate(int nsmall){
  15.     for(int i=0,j=(nsmall-1);i<nsmall,j>=0;i++,j--)
  16.         for(int k=0;k<nsmall;k++)
  17.             smallaux[k][j]=small[i][k];
  18.    
  19.     for(int i=0;i<nsmall;i++)
  20.             for(int j=0;j<nsmall;j++)
  21.                 small[i][j]=smallaux[i][j];
  22.                
  23. }
  24. int main() {
  25.     int nbig,nsmall;
  26.     while(cin>>nbig>>nsmall, nbig || nsmall){
  27.         for(int i=0;i<nbig;i++)
  28.             for(int j=0;j<nbig;j++)
  29.                 cin>>big[i][j];
  30.                
  31.         for(int i=0;i<nsmall;i++)
  32.             for(int j=0;j<nsmall;j++)
  33.                 cin>>small[i][j];
  34.                
  35.         int appear[4];
  36.         for(int k=0;k<4;k++){
  37.             appear[k]=0;
  38.             for(int i=0;i<(nbig-nsmall+1);i++)
  39.                 for(int j=0;j<(nbig-nsmall+1);j++)
  40.                     if(iguales(nbig,nsmall,i,j))
  41.                         appear[k]++;
  42.            
  43.             rotate(nsmall);
  44.         }
  45.         cout<<appear[0]<<' '<<appear[1]<<' '<<appear[2]<<' '<<appear[3]<<endl;
  46.     }
  47.    
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment