Advertisement
xerpi

jutge

Nov 24th, 2013
756
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.96 KB | None | 0 0
  1. //P18660
  2.  
  3. #include <iostream>
  4. #include <string>
  5. #include <vector>
  6.  
  7. using namespace std;
  8. typedef vector<vector<char> > Sopa;
  9.  
  10.  
  11. const int MINUSTOMAYUS = 'a' - 'A';
  12.  
  13. void marcar_palabra(int y, int x, Sopa& s, int medida, int dir){
  14.     if (dir == 1){
  15.         //Horizontal
  16.         for (int i=0; i < medida; ++i){
  17.             if (s[y][x] >= 'a' and s[y][x] <= 'z')
  18.                 s[y][x] = s[y][x] - MINUSTOMAYUS;
  19.             ++x;
  20.         }
  21.     }
  22.      //Vertical
  23.     else if (dir == 2){
  24.         for (int i=0; i < medida; ++i){
  25.             if (s[y][x] >= 'a' and s[y][x] <= 'z')
  26.                 s[y][x] = s[y][x] - MINUSTOMAYUS;
  27.             ++y;
  28.         }
  29.     }
  30.     else { //Diagonal
  31.         for (int i=0; i < medida; ++i){
  32.             if (s[y][x] >= 'a' and s[y][x] <= 'z')
  33.                 s[y][x] = s[y][x] - MINUSTOMAYUS;
  34.             ++x;
  35.             ++y;
  36.         }
  37.     }
  38. }
  39.  
  40. void find_word(int y, int x, Sopa& s, string p){
  41.     if (s[y][x] == p[0] or s[y][x] + MINUSTOMAYUS == p[0]) {
  42.         int medida_p = p.size();
  43.        
  44.         //Horizontal
  45.         if (s[0].size()-x >= medida_p){
  46.             int i = x+1;
  47.             int j = 1;
  48.             while(j < medida_p and (s[y][i] == p[j] or
  49.                 s[y][i] + MINUSTOMAYUS == p[j])) {
  50.                 ++i;
  51.                 ++j;
  52.             }
  53.            
  54.             if (j == medida_p)
  55.                 marcar_palabra(y,x,s,medida_p,1);
  56.         }
  57.        
  58.         //Vertical
  59.         if (s.size()-y >= medida_p){
  60.             int i = y+1;
  61.             int j = 1;
  62.             while(j < medida_p and (s[i][x] == p[j] or
  63.                 s[i][x] + MINUSTOMAYUS == p[j])) {
  64.                 ++i;
  65.                 ++j;
  66.             }
  67.            
  68.             if (j == medida_p)
  69.                 marcar_palabra(y,x,s,medida_p,2);        
  70.         }
  71.            
  72.         //Diagonal
  73.         if (s[0].size()-x >= medida_p and s.size()-y >= medida_p){
  74.             int i = x+1;
  75.             int j = y+1;
  76.             int l = 1;
  77.             while(l < medida_p and (s[j][i] == p[l] or
  78.                 s[j][i] + MINUSTOMAYUS == p[l])) {
  79.                 ++i;
  80.                 ++j;
  81.                 ++l;
  82.             }
  83.            
  84.             if (l == medida_p)
  85.                 marcar_palabra(y,x,s,medida_p,3);        
  86.         }
  87.     }
  88. }
  89.  
  90.  
  91. int main(){
  92.     int x,m,n;
  93.     bool primer = true;
  94.     while (cin >> x >> m >> n)
  95.     {
  96.         vector<string> palabra(x);
  97.         for (int i=0; i<x; ++i)
  98.             cin >> palabra[i];
  99.        
  100.         Sopa s(m, vector<char>(n));
  101.         for (int i=0; i < m; ++i)
  102.             for (int j=0; j < n; ++j)
  103.                 cin >> s[i][j];
  104.            
  105.  
  106.         for (int i=0; i < m; ++i)
  107.             for (int j=0; j < n; ++j)
  108.                 if (s[i][j] >= 'a' and s[i][j] <= 'z')
  109.                     for (int p=0; p < x; ++p)
  110.                         find_word(i,j,s,palabra[p]);
  111.                        
  112.         if (primer) primer = false;
  113.         else cout << endl;
  114.         for (int i=0; i < m; ++i){
  115.             cout << s[i][0];
  116.             for (int j=1; j < n; ++j)
  117.                 cout << ' ' << s[i][j];
  118.                 cout << endl;
  119.         }
  120.     }
  121. }
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128. //P91748
  129.  
  130. #include <cmath>
  131. #include <vector>
  132. #include <iostream>
  133. using namespace std;
  134.  
  135. typedef vector<int> Row;
  136. typedef vector<Row> Square;
  137.  
  138. int sum_n(int n);
  139. void fill_vector(vector <int>& v);
  140. bool is_vector_blank(vector <int>& v);
  141. bool is_latin(const Square& q);
  142.  
  143.  
  144. int main()
  145. {
  146.    
  147.    
  148. }
  149.  
  150. bool is_latin(const Square& q)
  151. {
  152.     int s = q.size();
  153.     vector <int> nums(s);
  154.  
  155.     //Rows
  156.     for (int i = 0; i < s; ++i) {
  157.         fill_vector(nums);
  158.         for (int j = 0; j < s; ++j) {
  159.             if (q[i][j] > s) return false;
  160.             nums[q[i][j]-1] = 0;
  161.         }
  162.         if (not is_vector_blank(nums)) return false;
  163.     }
  164.    
  165.     //Rows
  166.     for (int i = 0; i < s; ++i) {
  167.         fill_vector(nums);
  168.         for (int j = 0; j < s; ++j) {
  169.             if (q[j][i] > s) return false;
  170.             nums[q[j][i]-1] = 0;
  171.         }
  172.         if (not is_vector_blank(nums)) return false;
  173.     }
  174.     return true;
  175. }
  176.  
  177. bool is_vector_blank(vector <int>& v)
  178. {
  179.     int s = v.size();
  180.     for (int i = 0; i < s; ++i) {
  181.         if (v[i] != 0) return false;
  182.     }    
  183.     return true;
  184. }
  185.  
  186. void fill_vector(vector <int>& v)
  187. {
  188.     int s = v.size();
  189.     for (int i = 1; i <= s; ++i) {
  190.         v[i-1] = i;
  191.     }
  192. }
  193.  
  194. int sum_n(int n)
  195. {
  196.     int sum = 0;
  197.     for (int i = 1; i <= n; ++i)
  198.         sum += i;
  199.     return sum;
  200. }
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208. //P71711
  209.  
  210. #include <vector>
  211. #include <iostream>
  212. using namespace std;
  213.  
  214. typedef vector<int> Row;
  215. typedef vector<Row> Matrix;
  216.  
  217.  
  218. bool is_inc(const Matrix& m, int r, int c);
  219. void read_matrix(Matrix& to, int r, int c);
  220.  
  221. int main()
  222. {
  223.     int n = 1, f, c;
  224.     while (cin >> f >> c) {
  225.         Matrix m(f, Row(c));
  226.         read_matrix(m, f, c);
  227.         cout << "matriu " << n << ": ";
  228.         if (is_inc(m, f, c)) {
  229.             cout << "si" << endl;
  230.         } else {
  231.             cout << "no" << endl;
  232.         }
  233.         ++n;
  234.     }
  235. }
  236.  
  237. bool is_inc(const Matrix& m, int r, int c)
  238. {
  239.     int prev_x, x;
  240.     for (int j = 0; j < c; ++j) {
  241.         if (j == 0) {
  242.             prev_x = m[0][0];
  243.             for (int i = 1; i < r; ++i) {
  244.                 x = m[i][j];
  245.                 if (x <= prev_x) return false;
  246.                 prev_x = x;
  247.             }
  248.         } else if (j%2 == 0) {
  249.             for (int i = 0; i < r; ++i) {
  250.                 x = m[i][j];
  251.                 if (x <= prev_x) return false;
  252.                 prev_x = x;            
  253.             }          
  254.         } else {
  255.             for (int i = r-1; i >= 0; --i) {
  256.                 x = m[i][j];
  257.                 if (x <= prev_x) return false;
  258.                 prev_x = x;            
  259.             }
  260.         }      
  261.     }
  262.     return true;
  263. }
  264.  
  265. void read_matrix(Matrix& to, int r, int c)
  266. {
  267.     for (int i = 0; i < r; ++i) {
  268.             for (int j = 0; j < c; ++j) {
  269.             cin >> to[i][j];
  270.         }              
  271.     }
  272. }
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. //P27498
  283.  
  284.  
  285. #include <vector>
  286. using namespace std;
  287.  
  288. typedef vector< vector<int> > Matrix;
  289.  
  290.  
  291. void transpose(Matrix& m)
  292. {
  293.     int s = m.size();
  294.     for (int i = 1; i < s; ++i) {
  295.         for (int j = 0; j < i; ++j) {
  296.             swap(m[i][j], m[j][i]);
  297.         }      
  298.     }
  299.    
  300. }
  301.  
  302. int main()
  303. {
  304.    
  305.    
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement