Esempio n. 1
0
File: b.cpp Progetto: nozdrenkov/sp
void solve() {
  scanf("%d", &n);
  vvi closest;
  closest.assign(n, vi(4, -1));
  forn(i, n) {
    a[i].read();
  }
  for (int i = 0; i < n; ++i) {
    for (int j = i + 1; j < n; ++j) {
      int u = i, v = j;
      if (a[u].x == a[v].x) {
        if (a[u].y > a[v].y) swap(u, v);
        upd(u, closest[u][to_dir('v')], v);
        upd(v, closest[v][to_dir('^')], u);
      } else if (a[u].y == a[v].y) {
        if (a[u].x > a[v].x) swap(u, v);
        upd(u, closest[u][to_dir('>')], v);
        upd(v, closest[v][to_dir('<')], u);
      }
    }
  }
  int ans = doit(closest, 0);
  for (int i = 1; i < n; ++i) {
    ans = max(ans, doit(closest, i));
  }
  cout << ans << endl;
}
Esempio n. 2
0
void gameloop(int nrow, int ncol) {
    timeout(1000 / SAMPLING_RATE);
    const clock_t checkpoint = (clock_t) (CLOCKS_PER_SEC/GAME_SPEED);
    clock_t last_update = clock();
    struct snake * snake = new_snake(ncol/2, nrow/2);
    struct point food_pos = generate_food(nrow, ncol, snake);
    redraw(snake, food_pos);
    for (;;) {
        struct point tail_pos = snake->tail->pos;
        int ch;
        if ((ch = getch()) != ERR) {
            switch (ch) {
            case KEY_UP:
            case KEY_DOWN:
            case KEY_LEFT:
            case KEY_RIGHT:
                if (to_dir(ch) == reverse_dir(snake->heading)) {
                    break;
                }
                else {
                    snake->heading = to_dir(ch);
                    step_snake(snake);
                    tail_pos = snake->tail->pos;
                    redraw(snake, food_pos);
                }
                break;
            default:
                break;
            }
        }
        if (clock() - last_update >= checkpoint) {
            step_snake(snake);
            tail_pos = snake->tail->pos;
            redraw(snake, food_pos);
            last_update = clock();
        }
        if (point_equal(snake->head->pos, food_pos)) {
            grow_snake(snake, tail_pos);
            food_pos = generate_food(nrow, ncol, snake);
            redraw(snake, food_pos);
        }
        if (out_of_border(snake->head->pos, nrow, ncol)
                || eat_self(snake)) {
            display_lose(nrow, ncol);
            return;
        }
        if (snake->length == (nrow-2)*(ncol-2)) {
            display_win(nrow, ncol);
            return;
        }
    }
}
Esempio n. 3
0
u_char getcourse(int x, int y)
{
    return to_dir(me->p_x, me->p_y, x, y);
}
Esempio n. 4
0
File: b.cpp Progetto: nozdrenkov/sp
int doit(vvi closest, int pos) {
  int ans = 0;
  while (pos != -1) {
    ans++;
    int npos = closest[pos][to_dir(a[pos].dir)];

    int d1 = closest[pos][to_dir('^')];
    if (d1 != -1) closest[d1][to_dir('v')] = closest[pos][to_dir('v')];

    int d2 = closest[pos][to_dir('v')];
    if (d2 != -1) closest[d2][to_dir('^')] = closest[pos][to_dir('^')];

    int d3 = closest[pos][to_dir('>')];
    if (d3 != -1) closest[d3][to_dir('<')] = closest[pos][to_dir('<')];

    int d4 = closest[pos][to_dir('<')];
    if (d4 != -1) closest[d4][to_dir('>')] = closest[pos][to_dir('>')];

    pos = npos;
  }
  return ans;
}