题解 UVA12575 【Sin Cos Problem】
高中数学必修四填空题*1
根据辅助角公式,有:
其中:
所以函数的最大值显然是
至于取到最大值时的最小非负数
-
当
A=0 时,函数为f(x)=B\cos{x} ,当B>=0 时x=0 ;当B<0 时,x=\pi 。 -
当
A,B\not=0 时,\phi=\arctan{\dfrac{B}{A}} ,又因为g(x)=\sin{x} 在x=\dfrac{\pi}{2} 时取到最大值1 ,所以x 取\dfrac{\pi}{2}-\phi 时有最值。
然而因为
题目要求
也不要求导,二分什么的吧 orz Karry5307
#include <cstdio>
#include <cmath>
#define eps 1e-14
typedef long long ll;
inline int rd(){
int x=0,p=1;
char a=getchar();
while((a<48||a>57)&&a!='-')a=getchar();
if(a=='-')p=-p,a=getchar();
while(a>47&&a<58)x=(x<<1)+(x<<3)+(a&15),a=getchar();
return x*p;
}
const long double pi=acos(-1.0);
int T;
long double a,b;
long double p,ans;
int main(){
T=rd();
while(T--){
scanf("%Lf%Lf",&a,&b);
if(a==0&&b==0){
puts("0.00 0.00");
continue;
}
if(!a){
if(b>0)printf("%.2lf %.2Lf\n",0.00,1.0*b);
else printf("%.2Lf %.2Lf\n",pi,-1.0*b);
continue;
}
ans=sqrt(a*a+b*b);
p=pi/2-atan(1.0*b/a);
if(a*sin(p)+b*cos(p)<0)p+=pi;
if(p<0)p+=pi*2;
printf("%.2Lf %.2Lf\n",p,ans);
}
return 0;
}