ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1874. Футбольные ворота

java AC not formula
Послано esbybb 12 июл 2015 09:45
package timus;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.StringTokenizer;

public class p1874 {
    static double a, b;
    public static void main(String[] args) throws FileNotFoundException {
        InputStream is = System.in;
        FastScanner sc = new FastScanner(new InputStreamReader(is));
        a = sc.nextInt();
        b = sc.nextInt();
        double XP = 0.000000001;
        double edge = 26.819279181787458*2.0;

        double l = 0, r = edge;
        while (r - l > XP) {
           double m1 = l + (r - l) / 3,
              m2 = r - (r - l) / 3;
           if (f2(m1, edge) < f2(m2,edge))
              l = m1;
           else
              r = m2;
        }
        System.out.println(String.format("%.7f",Math.min(f2(l, edge),f2(r,edge))));
    }

    static double f2(double alfa, double sum2) {
        double beta = sum2 - alfa;
        double alfaRad = Math.toDegrees(alfa);
        double betaRad = Math.toDegrees(beta);

        double A = Math.cos(alfaRad)*a;
        double B = Math.cos(betaRad)*b;

        double h = Math.sin(alfaRad)*a;
        double l = Math.sin(betaRad)*b;
        return  A*B + (A*h+B*l)/2.0;
    }

    static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        FastScanner(Reader in) {
            br = new BufferedReader(in);
        }

        String next() {
            while (st == null || !st.hasMoreTokens()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }
    }

}