80分大佬求助!

P5735 【深基7.例1】距离函数

Grey_Wing @ 2023-07-11 23:13:39

#include<bits/stdc++.h>
#define ll long long
using namespace std;
template <typename T>
void in(T &x) {
    char c=getchar();
    int f=1;
    while((c>'9'||c<'0')&&c!='-'){
        c=getchar();
    }
    if(c=='-'){
        f=-1;
        c=getchar();
    }
    for(x=0;c>='0'&&c<='9';c=getchar()) {
        x=x*10+c-'0';
    }
    x*=f;
}
double work(double x1,double y11,double x2,double y2){
    return sqrt((x2-x1)*(x2-x1)+(y2-y11)*(y2-y11));
}
int main(){
    double x1,y11,x2,y2,x3,y3;
    in(x1);in(y11);in(x2);in(y2);in(x3);in(y3);
    double x, y, z;
    x=work(x1,y11,x2,y2);
    y=work(x1,y11,x3,y3);
    z=work(x3,y3,x2,y2);
    double ans=x+y+z;
    printf("%.2lf\n",ans);
    return 0;
}

为什么这个样例我老是过不了?

23.234 12.123

-99.99 99.99

-1 -100

正解:489.20

我的答案:407.07


by Terrible @ 2023-07-12 01:36:45

@xjy20100311

你的读入程序只会将小数部分读成下一个数的整数部分。实际上只读进去了 23.234 12.123 -99.99

请换成

template <typename T>
void in(T &x) {
    cin>>x;
}

(莫名喜感,高端的操作往往只需要最简谱的方式实现)

另外你可以尝试使用 hypot 这个函数,\mathrm{hypot}(x,y) 表示 \sqrt{x^2+y^2},可以简化代码。


by Grey_Wing @ 2023-07-12 22:50:02

@Terrible

谢谢大佬!


|