蒟蒻求助枚举做法是否可行
查看原帖
蒟蒻求助枚举做法是否可行
229008
yshpdyt楼主2023/10/23 11:24

大概是算求出两个圆心角的度数t1,t2,从枚举i边形的圆心角度数t,如果t1,t2均可以整除t说明符合题意,根据公式求出面积,退出循环

#include<bits/stdc++.h>
#define ll long double
#define yyy y1
#define N 200005
#define endl "\n" 
#define fi first
#define se second
using namespace std;
const ll mod=1e9+7;
const ll eps=1e-2;
const ll pi=acos(-1.00000);
ll X1,Y1,X2,Y2,X3,Y3;
pair<ll,ll> c;
ll d(ll x1,ll y1,ll x2,ll y2){
    return sqrtl((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
ll dq(ll x1,ll y1,ll x2,ll y2){
    return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
bool ch(ll a,ll b){
    if(fmod(a,b)<eps)return 1;
    return 0;
}
int main(){
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    cin>>X1>>Y1>>X2>>Y2>>X3>>Y3;
    ll d12=d(X1,Y1,X2,Y2);
    ll d23=d(X3,Y3,X2,Y2);
    ll d13=d(X3,Y3,X1,Y1);
    ll p=(d12+d23+d13)/2;
    ll s=(p*(p-d12)*(p-d23)*(p-d13));

    d12=dq(X1,Y1,X2,Y2);
    d23=dq(X3,Y3,X2,Y2);
    d13=dq(X3,Y3,X1,Y1);
    ll r=(d12*d23*d13)/(16*s);
    ll t1=acos(1-((d12)/(2*r)));
    ll t2=acos(1-((d23)/(2*r)));
    for(int i=3;i<=100;i++){
        ll t=2*pi/i;
        if(ch(t1,t)&&ch(t2,t)){
            ll x=i*sin(t)*r;
            printf("%.6lf",x);
            break;
        }
        cout<<endl;
    }
    return 0;
}

然而这样的问题是精度不太够,导致取模因为几位数出现了问题,样例都过不去

2023/10/23 11:24
加载中...