http://poj.org/problem?id=3299
当时入门的时候就从这个水题入手增加自信,导致自信都没了。
其实看懂公式之后前两个很简单,移一下项就可以了。
第三个需要一点耐心慢慢解出来,但也不是不行。
总之作为一道模拟是不错的。
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
double calc_H(double T, double D) {
return T + (0.5555) * (6.11 * exp(5417.7530 * ((1.0 / 273.16) - 1.0 / (D + 273.16))) - 10.0);
}
double calc_T(double H, double D) {
return H - (0.5555) * (6.11 * exp(5417.7530 * ((1.0 / 273.16) - 1.0 / (D + 273.16))) - 10.0);
}
double calc_D(double T, double H) {
double C1 = log(((H - T) / 0.5555 + 10.0) / 6.11);
double C2 = 1.0 / 273.16 - C1 / 5417.7530;
return 1.0 / C2 - 273.16;
}
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
char op[2];
while(~scanf("%s", op)) {
if(op[0] == 'E')
break;
bool bt = 0, bd = 0, bh = 0;
double T, D, H;
if(op[0] == 'D') {
bd = 1;
scanf("%lf", &D);
} else if(op[0] == 'T') {
bt = 1;
scanf("%lf", &T);
} else if(op[0] == 'H') {
bh = 1;
scanf("%lf", &H);
}
scanf("%s", op);
if(op[0] == 'D') {
bd = 1;
scanf("%lf", &D);
} else if(op[0] == 'T') {
bt = 1;
scanf("%lf", &T);
} else if(op[0] == 'H') {
bh = 1;
scanf("%lf", &H);
}
if(bd == 0) {
D = calc_D(T, H);
} else if(bt == 0) {
T = calc_T(H, D);
} else {
H = calc_H(T, D);
}
printf("T %.1f D %.1f H %.1f
", T, D, H);
}
}