Thứ Năm, 10 tháng 1, 2019

UVa 00114 - Simulation Wizardry (simulation of pinball machine)

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=50
Sol:
/****
* 114 - Simulation Wizardry
*/
#include <stdio.h>
#include <stdlib.h>
#define MAX_G 52
#define MAX_B 49*49
int grid[MAX_G][MAX_G];
int n, m;
typedef struct bumper
{
int v;
int c;
} bumper;
void printBoard() {
int i, j;
for (i = 0; i < m + 1; i++) {
for (j = 0; j < n + 1; j++) {
if (i == m || j == n || i == 1 || j == 1)
printf("W");
else
printf("%d", grid[i][j]);
}
printf("\n");
}
}
bumper bumpers[MAX_B];
int b;
#define RIGHT 0
#define LEFT 2
#define UP 1
#define DOWN 3
const int next_direction[4] = { DOWN, RIGHT, UP, LEFT };
/* | RIGHT | UP | LEFT | DOWN */
const int x_move[4] = { 1, 0, -1, 0 };
const int y_move[4] = { 0, 1, 0, -1 };
int main()
{
int wall_cost;
int direction;
int lifetime;
int total_value;
int value;
int x, y, new_x, new_y;
int i;
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
memset(grid, 0, sizeof(grid));
scanf("%d %d", &m, &n);
scanf("%d", &wall_cost);
scanf("%d", &b);
for (i = 1; i <= b; i+=1)
{
scanf("%d %d %d %d", &x, &y, &bumpers[i].v, &bumpers[i].c);
grid[x][y] = i;
}
total_value = 0;
while (scanf("%d %d %d %d", &x, &y, &direction, &lifetime) != EOF)
{
value = 0;
while (--lifetime > 0)
{
printf("%d, %d, %d\n", x, y, lifetime);
new_x = x + x_move[direction];
new_y = y + y_move[direction];
/* hit a wall */
if (new_x == m || new_y == n || new_x == 1 || new_y == 1)
{
lifetime -= wall_cost;
direction = next_direction[direction];
continue;
}
/* hit a bumper */
if ((i = grid[new_x][new_y]) != 0)
{
lifetime -= bumpers[i].c;
value += bumpers[i].v;
direction = next_direction[direction];
continue;
}
x = new_x;
y = new_y;
} /* while (lifetime >= 0) */
printf("%d\n", value);
total_value += value;
} /* while scanf */
printf("%d\n", total_value);
#ifndef ONLINE_JUDGE
system("pause");
#endif
return 0;
}

Không có nhận xét nào:

Đăng nhận xét

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...