POJ 1045

最近集训的时候爆零的次数比较多,所以打算空下来的时候刷刷水题来涨涨自信,结果发现不好刷啊。

poj1045这题,意思是告诉你两个物理公式,还有参数Vs,C,R  w,让你求出VR。

看了好久不会做。。第一次做到ACM里还要用物理的题目(其实是解方程。。)发现自己在知识的灵活应用上还不够到位。记下。

 

下面复制别人的题解。

 

分析:利用V2分别等于两个式子,将i,V2和V1带入,可得方程:R*C*d(Vs * cos(wt) - Vr * cos(wt + q))/dt  = Vr * cos(wt + q)

根据求导公式:d(cos(x))/dx = -sinx可将原方程化为:R*C*w*(Vr*sin(wt + q) - Vs*sin(wt)) = Vr * cos(wt + q)

在这里三角函数的参数有两个:wt+q和wt,我们分别令他们为0,方程分别可变为:R*C *w*Vs*sin(q) = Vr; R*C * w*sin(q) = cos(q)

由2式得:cot(q) = R * C * w。

由公式:sin^2(a) = 1/(cot ^2(a) + 1)

可得:sin(q)=sqrt(1/(cot^2(q) + 1))

即:sin(q) =sqrt(1/(R^2*C^2*w^2 + 1))

代入1式可得:Vr = R * C * w * Vs * sqrt(1/(R^2*C^2*w^2 + 1))

 

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;

int n;
double vs, r, c, w;

int main()
{
    //freopen("t.txt", "r", stdin);
    scanf("%lf%lf%lf%d", &vs, &r, &c, &n);
    while (n--)
    {
        scanf("%lf", &w);
        printf("%.3f\n", r * c * w * vs * sqrt(1/(r*r*c*c*w*w + 1)));
    }
    return 0;
}
View Code

 

 

posted @ 2013-07-27 00:35  蛋丁  阅读(468)  评论(0编辑  收藏  举报