2016HUAS暑假集训训练2 L - Points on Cycle

题目链接:https://vjudge.net/contest/121192#problem/L

这是一道很有意思的题,就是给定一个以原点为圆心的圆,然后给定 一个点  求最大三角的 其他的坐标 ,很容易知道这个三角形一定是等边三角形,所以圆心就是三角形的重心,刚开始用直线的方程来写,还要解一个复杂的一元二次方程,十分复杂,后来又想到一种简单的方法

2016HUAS暑假集训训练2 L - Points on Cycle_第1张图片

这样就可以得到一个点的坐标  又重心为圆点  则三点的横坐标之和为0 总坐标之和为0

ac代码:

 1 import java.io.BufferedInputStream;
 2 import java.text.DecimalFormat;
 3 import java.util.Scanner;
 4 
 5 public class Main {
 6   public static void main(String[] args) {
 7       DecimalFormat format = new DecimalFormat("0.000");
 8      Scanner s = new Scanner(new BufferedInputStream(System.in));
 9     int t = s.nextInt();double x,y,x1,y1,x2,y2, c,r,a,b,d;  
10     while(t-->0){
11           x = s.nextDouble();y = s.nextDouble();
12                  r=Math.sqrt(x*x+y*y);  
13                  a=r*r;  
14                  b=r*r*y;  
15                  c=r*r*r*r/4-x*x*r*r;  
16                  d=b*b-4*a*c;  
17                  y1=(-1*b-Math.sqrt(d))/(2*a);  
18                  y2=(-1*b+Math.sqrt(d))/(2*a);  
19                  if(x==0)  
20                  {  
21                      x1=-Math.sqrt(r*r-y1*y1);  
22                      x2=Math.sqrt(r*r-y2*y2);  
23                  }  
24                  else  
25                  {  
26                      x1=(-1*r*r/2-y*y1)/x;  
27                      x2=(-1*r*r/2-y*y2)/x;  
28                  }  
29                  System.out.println(format.format(x1)+" "+format.format(y1)+" "+format.format(x2)+" "+format.format(y2));
30              }  
31             s.close();
32          }
33 }

 

转载于:https://www.cnblogs.com/LIUWEI123/p/5698760.html

你可能感兴趣的:(2016HUAS暑假集训训练2 L - Points on Cycle)