为什么s!=s1+s2+s3(应该是精度问题
查看原帖
为什么s!=s1+s2+s3(应该是精度问题
561319
dbjbjbj楼主2022/10/12 21:03

见样例

#include<bits/stdc++.h>
using namespace std;

struct node{
	int x,y;
}a[4],b;

inline int read() {
	int f = 1, x = 0;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') {
			f = -1;
		}
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = (x << 3) + (x << 1) + (ch ^ 48);
		ch = getchar();
	}
	return ~f ? x : -x;
}

inline void write(int x) {
	if (x < 0) {
		putchar('-');
		x = -x;
	}
	if (x > 9) {
		write(x / 10);
		putchar(x % 10 + '0');
	}
	else
		putchar(x + '0');
	return;
}

double dis(node a,node b){
	return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));
}

double S(node a,node b,node c){
	double ab=dis(a,b),bc=dis(b,c),ac=dis(a,c);
	double p=(ab+bc+ac)/2;
	return sqrt(p*(p-ab)*(p-bc)*(p-ac));
}

int main(){
//	ios::sync_with_stdio(false);
	
	a[1].x=read(),a[1].y=read();
	a[2].x=read(),a[2].y=read();
	a[3].x=read(),a[3].y=read();
	b.x=read(),b.y=read();
	double s=S(a[1],a[2],a[3]),s1=S(a[1],a[2],b),s2=S(a[1],a[3],b),s3=S(a[2],a[3],b);
//	cout<<s<<' '<<s1<<' '<<s2<<' '<<s3;
	if(!s1||!s2||!s3){
		if(s1==s||s2==s||s3==s){
			putchar('4');
		}
		else{
			putchar('3');
		}
	}
	else{
//		cout<<s1+s2+s3;
		if(s1+s2+s3>s){
			cout<<s<<' '<<s1<<' '<<s2<<' '<<s3<<'\n';
			putchar('2');
		}
		else{
			putchar('1');
		}
	}
	
//	cin.tie(0);
	return 0;
}
2022/10/12 21:03
加载中...