MDeath-Kid

- M I T & Y
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

POJ 3299

Posted on 2011-11-03 20:49  MDeath-Kid  阅读(213)  评论(0编辑  收藏  举报

g++WA

C++ AC

don't know why!

代码流程控制有点多,还好AC了,为了避免精度损失,用的二分。

POJ 3299
/*MDK 3299 Accepted 220K 16MS C++ 3166B 2011-11-03 20:45:05 */
double T,D,H;

double get_e(double D)
{
return 6.11 * pow(EXP,
5417.7530 * ((1.0/273.16)
- (1.0/(D + 273.16))));
}

double get_h(double D)
{
return 0.5555 * (get_e(D) - 10.0);
}

double get_humidex(double T,double D)
{
return T + get_h(D);
}

double get_T(double H,double D)
{
return H - get_h(D);
}

double get_D(double T,double H)
{
double L = -100,R = 100,ans = L,ds = H - T;
while(L < R - esp) {
double mid = (L + R)/2;
if(get_h(mid) < ds) {
ans = L;
L = mid;

} else {
R = mid;
}
}
return ans;
}
int main()
{
char a,b;
while(~SCFC(a) && a != 'E') {
if(a == 'T') SCLF(T);
else if(a=='D') SCLF(D);
else if(a=='H') SCLF(H);

SCFC(b);
if(b == 'T') SCLF(T);
else if(b=='D') SCLF(D);
else if(b=='H') SCLF(H);

double ans;
if (a == 'T') {
if(b == 'D') {
ans = get_humidex(T,D);
printf("T %.1lf D %.1lf H %.1lf\n",T,D,ans);
} else if(b == 'H') {
ans = get_D(T,H);
printf("T %.1lf D %.1lf H %.1lf\n",T,ans,H);
}
} else if(a =='D') {
if(b == 'T') {
ans = get_humidex(T,D);
printf("T %.1lf D %.1lf H %.1lf\n",T,D,ans);
} else if(b == 'H') {
ans = get_T(H,D);
printf("T %.1lf D %.1lf H %.1lf\n",ans,D,H);
}
} else if(a == 'H') {
if(b == 'D') {
ans = get_T(H,D);
printf("T %.1lf D %.1lf H %.1lf\n",ans,D,H);
} else if(b == 'T') {
ans = get_D(T,H);
printf("T %.1lf D %.1lf H %.1lf\n",T,ans,H);
}
}
}
}