JosepRivaille

X76804: Wall-E solar

May 21st, 2015
577
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5.  
  6.  
  7. struct Info{
  8.     char contingut;  // Escombraries del lloc.
  9.     int energia;     // Energia que pot aconseguir del lloc.
  10. };
  11.  
  12. typedef vector< vector<Info> > Camp;
  13.  
  14. void Read(Camp& M){
  15.     int f = M.size();
  16.     int c = M[0].size();
  17.     for(int i=0; i<f; ++i){
  18.         for(int j=0; j<c; ++j){
  19.             cin >> M[i][j].contingut;
  20.         }
  21.     }
  22.     char ene;
  23.     for(int k=0; k<f; ++k){
  24.         for(int l=0; l<c; ++l){
  25.             cin >> ene;
  26.             ene -= '0';
  27.             M[k][l].energia = ene;
  28.         }
  29.     }
  30. }
  31.  
  32. void Recorregut(Camp& M, int& f, int& c, int& energia, string s, int& escombraries){
  33.     int i = 0;
  34.     int tam = s.size();
  35.     while (i < tam && energia > 0) {
  36.         //Nord
  37.         if (s[i] == 'N') {
  38.             while (energia > 0 && M[f-1][c].contingut != 'X'){
  39.                 if (M[f][c].contingut != '.'){
  40.                     escombraries += M[f][c].contingut - '0';
  41.                     M[f][c].contingut = '.';
  42.                     --energia;
  43.                 }
  44.                 energia += M[f][c].energia;
  45.                 M[f][c].energia = 0;
  46.                 if (energia > 0) --f;
  47.             }
  48.         }
  49.         //Sud
  50.         else if (s[i] == 'S') {
  51.             while (energia > 0 && M[f+1][c].contingut != 'X'){
  52.                 if (M[f][c].contingut != '.'){
  53.                     escombraries += M[f][c].contingut - '0';
  54.                     M[f][c].contingut = '.';
  55.                     --energia;
  56.                 }
  57.                 energia += M[f][c].energia;
  58.                 M[f][c].energia = 0;
  59.                 if (energia > 0) ++f;
  60.             }
  61.         }
  62.         //Est
  63.         else if (s[i] == 'E') {
  64.             while (energia > 0 && M[f][c+1].contingut != 'X'){
  65.                 if (M[f][c].contingut != '.'){
  66.                     escombraries += M[f][c].contingut - '0';
  67.                     M[f][c].contingut = '.';
  68.                     --energia;
  69.                 }
  70.                 energia += M[f][c].energia;
  71.                 M[f][c].energia = 0;
  72.                 if (energia > 0) ++c;
  73.             }
  74.         }
  75.         //Oest
  76.         else if (s[i] == 'O') {
  77.             while (energia > 0 && M[f][c-1].contingut != 'X'){
  78.                 if (M[f][c].contingut != '.'){
  79.                     escombraries += M[f][c].contingut - '0';
  80.                     M[f][c].contingut = '.';
  81.                     --energia;
  82.                 }
  83.                 energia += M[f][c].energia;
  84.                 M[f][c].energia = 0;
  85.                 if (energia > 0) --c;
  86.             }
  87.         }
  88.         ++i;
  89.     }
  90.     if (energia > 0 && M[f][c].contingut != '.') escombraries += M[f][c].contingut - '0';
  91. }
  92.  
  93. void Write(int escombraries, int energia, int f, int c){
  94.     cout << "escombraries: " << escombraries << endl;
  95.     cout << "energia: " << energia << endl;
  96.     cout << "posicio: (" << f << "," << c << ")" << endl;
  97. }
  98.  
  99.  
  100. int main(){
  101.     int f, c;
  102.     cin >> f >> c;
  103.     Camp M(f, vector<Info> (c));
  104.     Read(M);
  105.     int energia, escombraries = 0;
  106.     string s;
  107.     cin >> f >> c >> energia >> s;
  108.     Recorregut(M, f, c, energia, s, escombraries);
  109.     Write(escombraries, energia, f, c);
  110. }
  111.  
  112. //JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment