社区讨论

一个大蒟蒻黄题求助

P1355神秘大三角参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi86blr2
此快照首次捕获于
2025/11/21 09:20
4 个月前
此快照最后确认于
2025/11/21 09:20
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int x1,x2,x3,x4,y1,y2,y3,y4;
double sqrt(int x){
	if(x==0)return 0;
	double result=1,pre=0;
	while(result!=pre){
		pre=result;
		result=(result+x/result)/2;
	}
	return result;
	//本函数摘自https://blog.csdn.net/sinat_35678407/article/details/82764988 
	//做法:牛顿迭代法 
}
double juli(int xa,int ya,int xb,int yb){
	return sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya));
}
bool dunjiao(){
	int a=min((int)juli(x1,y1,x2,y2),min((int)juli(x1,y1,x3,y3),(int)juli(x2,y2,x3,y3)));
	int c=max((int)juli(x1,y1,x2,y2),max((int)juli(x1,y1,x3,y3),(int)juli(x2,y2,x3,y3)));
	int b=(int)juli(x1,y1,x2,y2)+(int)juli(x1,y1,x3,y3)+(int)juli(x2,y2,x3,y3)-a-c;
	if(a*a+b*b<c*c)return true;
	else return false;
}
void check4(){
	bool f=false;
	if(x4==x1&&y4==y1)f=true;
	if(x4==x2&&y4==y2)f=true;
	if(x4==x3&&y4==y3)f=true;
	if(f){
		cout<<4;
		exit(0);
	}
	return;
}
void check3(){
	double ab=juli(x1,y1,x2,y2),ac=juli(x1,y1,x3,y3),bc=juli(x2,y2,x3,y3);
	double ad=juli(x1,y1,x4,y4),bd=juli(x2,y2,x4,y4),cd=juli(x3,y3,x4,y4);
	//cout<<ab<<' '<<bc<<' '<<ac<<endl;
	//cout<<ad<<' '<<bd<<' '<<cd<<endl;
	if(ad+bd==ab||ad+cd==ac||bd+cd==bc){
		cout<<3;
		exit(0);
	}
	return;
}
void check2(){
	bool f=false;
	if(x4<=x1&&x4<=x2&&x4<=x3)f=true;
	if(x4>=x1&&x4>=x2&&x4>=x3)f=true;
	if(y4<=y1&&y4<=y2&&y4<=y3)f=true;
	if(y4>=y1&&y4>=y2&&y4>=y3)f=true;
	if(f||dunjiao()){
		cout<<2;
		exit(0);
	}
	return;
}
int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
int main(){
	x1=read();y1=read();
	x2=read();y2=read();
	x3=read();y3=read();
	x4=read();y4=read();
	check4();
	check3();
	check2();
	if(!dunjiao())cout<<1;
	else cout<<2;
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...