Advertisement
Ausdauer

P18660 Sopa de lletres

Jun 28th, 2017
847
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. //P18660 Sopa de lletres
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. typedef vector<string> Llista;
  9. typedef vector< vector<char> > Matriu;
  10.  
  11. Llista lleguir_llista(int x) {
  12.     Llista s(x);
  13.     for(int i = 0; i < s.size() ; ++i) cin >> s[i];
  14.     return s;
  15. }
  16. Matriu lleguir_sopa(int n , int m) {
  17.     Matriu sopa(n, vector<char> (m));
  18.     for( int i = 0 ; i < sopa.size(); ++i) {
  19.         for(int j = 0 ; j < sopa[0].size() ; ++j) cin >> sopa[i][j];
  20.     }
  21.     return sopa;
  22. }
  23. void imprimir_sopa(const Matriu& sopa){
  24.     for(int i = 0 ; i < sopa.size(); ++i) {
  25.         bool primero = false;
  26.         for( int j = 0; j < sopa[0].size() ; ++j) {
  27.             if(primero) cout << ' ';
  28.             else primero = true;
  29.             cout << sopa[i][j];
  30.         }
  31.         cout << endl;
  32.     }
  33. }
  34. void convertir_mayusculas(Matriu& sopa, int l, int i, int j, int inici_i, int inici_j){
  35.     int k = 0; 
  36.     while (k < l) {
  37.         if(sopa[i][j] >= 'a' and sopa[i][j] <= 'z') sopa[i][j] = char(int(sopa[i][j]) - int('a') + int('A'));
  38.         i += inici_i;
  39.         j += inici_j;
  40.         ++k;
  41.     }
  42. }
  43. bool esta(const Matriu& aux, string s, int i , int j, int inici_i, int inici_j) {
  44.     int k = 0;
  45.     while(i < aux.size() and j < aux[0].size() and k < s.length()) {
  46.         if(s[k] != aux[i][j]) return false;
  47.         i += inici_i;
  48.         j += inici_j;
  49.         ++k;
  50.     }
  51.     return k == s.length();
  52. }
  53. void sopa_lletres(const Matriu& aux, Matriu& sopa , Llista s) {
  54.     for(int k = 0 ; k < s.size() ; ++k) {
  55.         int i  = 0 ;
  56.         string s1 = s[k];
  57.         while(i < sopa.size()) {
  58.             int j = 0;
  59.             while(j < sopa[0].size()) {
  60.                 if(s1[0] == aux[i][j]) {
  61.                     if(esta(aux, s1, i, j, 0, 1)) convertir_mayusculas(sopa, s1.length() ,i ,j , 0 , 1);
  62.                     if(esta(aux, s1, i, j, 1, 0)) convertir_mayusculas(sopa, s1.length() ,i ,j , 1 , 0);
  63.                     if(esta(aux, s1, i, j, 1, 1)) convertir_mayusculas(sopa, s1.length() ,i ,j , 1 , 1);    
  64.                 }
  65.                 ++j;
  66.             }
  67.             ++i;
  68.         }
  69.     }
  70. }
  71. int main() {
  72.     int x, n ,m;
  73.     bool primero = true;
  74.     while(cin >> x >> n >> m) {
  75.         Llista s = lleguir_llista(x);
  76.         Matriu sopa = lleguir_sopa(n, m);
  77.         Matriu aux  = sopa;
  78.         sopa_lletres(aux,sopa, s);
  79.         if(not primero) cout << endl;
  80.         else primero = false;
  81.         imprimir_sopa(sopa);
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement