Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define PI 3.14159265359
- #define DEGREES 360
- #define MINUTES 60
- #define SECONDS 60
- #define PIZZA_SIZE (DEGREES * MINUTES * SECONDS)
- int normalize_degree_in_seconds(int degree_in_seconds) {
- if (degree_in_seconds >= PIZZA_SIZE) {
- degree_in_seconds -= PIZZA_SIZE;
- }
- return degree_in_seconds;
- }
- int calc_degree_in_seconds(const int d, const int m, const int s) {
- return s + (SECONDS * m) + (SECONDS * MINUTES * d);
- }
- int next_piece_degree_in_seconds(const char *pizza, int piece_degree_in_seconds) {
- int degree_in_seconds;
- for (degree_in_seconds = piece_degree_in_seconds + 1; degree_in_seconds < PIZZA_SIZE && pizza[degree_in_seconds] != 0x1; degree_in_seconds++);
- if (pizza[degree_in_seconds] != 0x1) {
- for (degree_in_seconds = 0; pizza[degree_in_seconds] != 0x1; degree_in_seconds++);
- }
- return degree_in_seconds;
- }
- double calc_biggest_piece(const char *pizza, const int pizza_radius, const int piece_degree_in_seconds) {
- int initial_degree_in_seconds = piece_degree_in_seconds;
- int final_degree_in_seconds = next_piece_degree_in_seconds(pizza, initial_degree_in_seconds);
- int biggest_piece_degree_in_seconds = 0;
- do {
- int piece_degree_in_seconds = final_degree_in_seconds - initial_degree_in_seconds;
- if (piece_degree_in_seconds <= 0) {
- piece_degree_in_seconds += PIZZA_SIZE;
- }
- if (piece_degree_in_seconds > biggest_piece_degree_in_seconds) {
- biggest_piece_degree_in_seconds = piece_degree_in_seconds;
- }
- initial_degree_in_seconds = final_degree_in_seconds;
- final_degree_in_seconds = next_piece_degree_in_seconds(pizza, initial_degree_in_seconds);
- } while (initial_degree_in_seconds != piece_degree_in_seconds);
- return ((double) biggest_piece_degree_in_seconds / 3600) / 360 * pizza_radius * pizza_radius * PI;
- }
- double calc_test_case() {
- int r, n, d, m, s;
- char pizza[PIZZA_SIZE] = {0};
- scanf("%d %d %d %d %d", &r, &n, &d, &m, &s);
- int piece_degree_in_seconds = calc_degree_in_seconds(d, m, s);
- int degree_in_seconds = 0;
- while (n--) {
- degree_in_seconds += piece_degree_in_seconds;
- degree_in_seconds = normalize_degree_in_seconds(degree_in_seconds);
- if (pizza[degree_in_seconds] & 0x1) {
- break;
- }
- pizza[degree_in_seconds] = 0x1;
- }
- return calc_biggest_piece(pizza, r, piece_degree_in_seconds);
- }
- int main(int argc, char **argv) {
- int test_cases;
- scanf("%d", &test_cases);
- while(test_cases--) {
- printf("%f\n", calc_test_case());
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement