Ranking (as of 2015-03-13): 25 out of 375
Language: C++
/* UVa 603 - Parking Lot To build using Visual Studio 2012: cl -EHsc -O2 UVa_603_Parking_Lot.cpp */ #include <cstdio> const int nr_cars_max = 20; struct car { int original_, parked_, current_; } cars[nr_cars_max + 1]; int main() { int nr_sets; scanf("%d", &nr_sets); getchar(); getchar(); // skip a blank line while (nr_sets--) { int nr_cars; for (nr_cars = 0; ; nr_cars++) { car& c = cars[nr_cars]; scanf("%d", &c.original_); if (c.original_ == 99) break; c.parked_ = 0; c.current_ = c.original_; } getchar(); while (true) { int cc; if ((cc = getchar()) == '\n' || cc == EOF) break; ungetc(cc, stdin); int p; scanf("%d", &p); getchar(); int min_d = nr_cars_max + 1, min_i; for (int i = 0; i < nr_cars; i++) { car& c = cars[i]; if (!c.parked_) { int d = p - c.current_; if (d < 0) d += nr_cars_max; if (d < min_d) { min_d = d; min_i = i; } } } for (int i = 0; i < nr_cars; i++) { car& c = cars[i]; if (!c.parked_) { c.current_ += min_d; if (c.current_ > nr_cars_max) c.current_ -= nr_cars_max; if (i == min_i) c.parked_ = c.current_; } } } for (int i = 0; i < nr_cars; i++) { const car& c = cars[i]; if (c.parked_) printf("Original position %d parked in %d\n", c.original_, c.parked_); else printf("Original position %d did not park\n", c.original_); } if (nr_sets) putchar('\n'); } return 0; }
No comments:
Post a Comment