标签:
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
Sample Output
问题分析:它是一道几何题,假设以知点a坐标为(x0,y0),位置点b,c为(x1,y1),(x2,y2). 圆方程为x2+y2 = r2;可将圆方程化为x=rcosα,y=rsinα;
又有x12+y1 2= r2 = x02+y0 2,(a*b)/|a|*|b| = cos120。
易得 acosα + bsinα = -0.5r
(acosα)2 = (0.5r + bsinα)2
r2sinα2 + rbsinα + 0.25r2 - a2 = 0
得 x1 = -0.5*b + a*√3 * 0.5 或 x1 = -0.5*b - a*√3 *0.5(舍去)
及 y = -0.5*b - a*√3 * 0.5 或 y= 0.5*b + a*√3 * 0.5(舍去)
同理可得x2,y2;
也可直接利用cos(α+β) = cosαcosβ - sinαsinβ ,sin(α+β) = sinαcosβ + cosαsinβ求解,
1 #include <cstdio> 2 #include <cmath> 3 int main() 4 { 5 double a,b,x0,y0,x1,y1,x2,y2; 6 int t; 7 a=sqrt(3.0)/2; 8 b=-0.5; 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%lf%lf",&x0,&y0); 13 x1 = b*x0 - a*y0; 14 y1 = b*y0 + a*x0; 15 x2 = b*x0 + a*y0; 16 y2 = b*y0 - a*x0; 17 if(y1<y2 || ((fabs(y1-y2) < 0.005) && x1 < x2)) 18 printf("%.3lf %.3lf %.3lf %.3lf\n",x1,y1,x2,y2); 19 else 20 printf("%.3lf %.3lf %.3lf %.3lf\n",x2,y2,x1,y1); 21 } 22 return 0; 23 }
暑假集训(2)第八弹 ----- Points on Cycle(hdu1700)
标签:
原文地址:http://www.cnblogs.com/huas-zlw/p/5692757.html