Thursday, June 5, 2014

UVa 11459 - Snakes and Ladders

Accepted date: 2014-06-05
Ranking (as of 2014-06-05): 279 out of 661
Language: C++

/*
  UVa 11459 - Snakes and Ladders

  To build using Visual Studio 2012:
    cl -EHsc -O2 UVa_11459_Snakes_and_Ladders.cpp
*/

#include <cstdio>

const int die_max = 6, nr_squares = 100, nr_players_max = 1000000;

int players[nr_players_max]; // players[i] is the current square # of i-th player
int squares[nr_squares + die_max];
  // squares[i] is the next square to advance for i-th (i > 0) square

int main()
{
  int tc;
  scanf("%d", &tc);
  while (tc--) {
    int i, j, k;
    for (i = 1; i < nr_squares; i++)
      squares[i] = i;
    for ( ; i < nr_squares + die_max; i++)
      squares[i] = nr_squares;
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
    for (i = 0; i < a; i++)
      players[i] = 1;
    for (i = 0; i < b; i++) {
      scanf("%d %d", &j, &k);
      squares[j] = k;
    }
    bool game_over = false;
    for (i = 0; i < c; i++) {
      scanf("%d", &j);
      if (!game_over) {
        int& p = players[i % a];
        if ((p = squares[p + j]) == nr_squares)
          game_over = true;
      }
    }
    for (i = 0; i < a; i++)
      printf("Position of player %d is %d.\n", i + 1, players[i]);
  }
  return 0;
}

No comments:

Post a Comment