社区讨论

9,10点迷之出负数,求大神改错

P1378油滴扩展参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi6goih3
此快照首次捕获于
2025/11/20 04:35
4 个月前
此快照最后确认于
2025/11/20 04:35
4 个月前
查看原帖
CPP
#include<iostream>
#include<cmath>
using namespace std;
double yd[7][2];double b[7];bool c[7];//分别是圆的坐标,半径,占位 
double x1,y10,x2,y2,s,f,maxn;//矩阵坐标 
int n;const double pi=3.141592653589;
void dfs(int);
double judge(int);
int main()
{
cin>>n;
cin>>x1>>y10>>x2>>y2;
for(int i=1;i<=n;++i)
cin>>yd[i][1]>>yd[i][2];
s=abs((x1-x2)*(y10-y2));//求长方形面积 
dfs(1);
for(int i=1;i<=n;++i)
f=f+b[i]*b[i]*pi;
int o=s-maxn*pi;//判断四舍五入 
if(s-maxn*pi-o>0.5)
++o;
cout<<o;
return 0;
}
void dfs(int p)
{if(p==n+1)
{double ma=0;
for(int i=1;i<=n;++i)
ma+=b[i]*b[i];//求出当前试出的面积和 
if(ma>maxn)
maxn=ma;}//更新最大面积 
for(int i=1;i<=n;++i)
{if(c[i]==0)
{c[i]=1;
b[i]=judge(i);
dfs(p+1);
b[i]=0;
c[i]=0;}}}
double judge(int y)
{double man=999999;
if(abs(x1-yd[y][1])<man)
man=abs(x1-yd[y][1]);
if(abs(x2-yd[y][1])<man)
man=abs(x2-yd[y][1]);
if(abs(y10-yd[y][2])<man)
man=abs(y10-yd[y][2]);
if(abs(y2-yd[y][2]<man))
man=abs(y2-yd[y][2]);//判断是否出界 
for(int i=1;i<=n;++i)
{if(i!=y&&b[i]!=0)//判断是否被别的圆包住 
{if(b[i]*b[i]>(yd[i][1]-yd[y][1])*(yd[i][1]-yd[y][1])+(yd[i][2]-yd[y][2])*(yd[i][2]-yd[y][2]))
return 0; 
if((man+b[i])*(man+b[i])>(yd[i][1]-yd[y][1])*(yd[i][1]-yd[y][1])+(yd[i][2]-yd[y][2])*(yd[i][2]-yd[y][2]))
man=sqrt((yd[i][1]-yd[y][1])*(yd[i][1]-yd[y][1])+(yd[i][2]-yd[y][2])*(yd[i][2]-yd[y][2]))-b[i];}}
return man;}//判断是否与其他圆相交 

回复

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

正在加载回复...