Advertisement
juanjo12x

UVA_647_Chutes_And_Ladders

Aug 5th, 2014
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <map>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. int main(void) {
  7.   int n, a, b;
  8.   int players[6];
  9.   bool miss[6];
  10.   int throws[1001];
  11.   map<int,int> ladder;
  12.   map<int,int> extra;
  13.  
  14.   n = 0;
  15.   while (cin >> throws[n]) {
  16.     if (throws[n] == 0)
  17.       break;
  18.  
  19.     n++;
  20.   }
  21.  
  22.   while (cin >> n) {
  23.     if (!n)
  24.       break;
  25.  
  26.     ladder.clear();
  27.     extra.clear();
  28.  
  29.     while (cin >> a >> b) {
  30.       if (!a && !b)
  31.         break;
  32.  
  33.       ladder[a] = b;
  34.     }
  35.  
  36.     while (cin >> a) {
  37.       if (a == 0)
  38.         break;
  39.  
  40.       extra[abs(a)] = a;
  41.     }
  42.  
  43.     int winner;
  44.     int cur_player = 0;
  45.     for (int i = 0; i < 6; i++) {
  46.       miss[i] = false;
  47.       players[i] = 0;
  48.     }
  49.     int cur_throw = 0;
  50.  
  51.     while (true) {
  52.       if (miss[cur_player]) {
  53.         miss[cur_player] = false;
  54.         cur_player++;
  55.         if (cur_player >= n)
  56.           cur_player = 0;
  57.         continue;
  58.       }
  59.  
  60.       if (players[cur_player] + throws[cur_throw] > 100) {
  61.         cur_throw++;
  62.         cur_player++;
  63.         continue;
  64.       } else if (players[cur_player] + throws[cur_throw] == 100) {
  65.         winner = cur_player + 1;
  66.         break;
  67.       }
  68.  
  69.       players[cur_player] += throws[cur_throw];
  70.       cur_throw++;
  71.  
  72.       if (ladder.find(players[cur_player]) != ladder.end()) {
  73.         players[cur_player] = ladder[players[cur_player]];
  74.         if (players[cur_player] == 100) {
  75.           winner = cur_player + 1;
  76.           break;
  77.         }
  78.       }
  79.  
  80.       if (extra.find(players[cur_player]) != extra.end()) {
  81.         if (extra[players[cur_player]] < 0) {
  82.           miss[cur_player] = true;
  83.         } else {
  84.           cur_player--;
  85.         }
  86.       }
  87.  
  88.       cur_player++;
  89.       if (cur_player >= n)
  90.         cur_player = 0;
  91.     }
  92.  
  93.     cout << winner << endl;
  94.   }
  95.  
  96.   return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement