QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#714709#9540. Double 11ucup-team3691Compile Error//C++202.6kb2024-11-06 03:26:562024-11-06 03:26:57

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 03:26:57]
  • 评测
  • [2024-11-06 03:26:56]
  • 提交

answer

#include <iostream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
long long v[200005];
//int opt[200005];
long long spar[200005];
long long lz[1800005];
long long mijloc[1800005];
long long drr[1800005];
pair<long double,int> dp[200005];
long double calc(int i,int j)
{
    if(i>=j)
    {
        return 1e9;
    }
    return dp[i].first+sqrtl((spar[j]-spar[i])*(j-i));
}
void push(int node,int st,int dr)
{
    if(lz[node]!=-1)
    {
        mijloc[node]=lz[node];
        drr[node]=lz[node];
        if(st!=dr)
        {
            lz[node*2]=lz[node];
            lz[node*2+1]=lz[node];
            drr[node*2]=lz[node];
            drr[node*2+1]=lz[node];
            mijloc[node*2+1]=lz[node];
            mijloc[node*2+1]=lz[node];
        }
    }
    lz[node]=-1;
}
void update(int node,int st,int dr,int from)
{
    push(node,st,dr);
    if(dr<st)
    {
        return;
    }
    int mij=(st+dr)/2;
    if(st==dr)
    {
        if(calc(from,mij)<=calc(mijloc[node],mij))
        {
            lz[node]=from;
            push(node,st,dr);
        }
        return;
    }
    if(calc(from,mij)<=calc(drr[node*2],mij))
    {
        lz[node*2+1]=from;
        push(node*2+1,mij+1,dr);
        update(node*2,st,mij,from);
    }
    else
    {
        update(node*2+1,mij+1,dr,from);
    }
    drr[node]=drr[node*2+1];
    mijloc[node]=drr[node*2];
}
int qr(int node,int st,int dr,int poz)
{
    push(node,st,dr);
    if(st==dr)
    {
       return mijloc[node];
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
    {
       return qr(node*2,st,mij,poz);
    }
    else
        return qr(node*2+1,mij+1,dr,poz);
}
int n;
int check(long double plm)
{
    long double valus;
    int from;
    lz[1]=0;
    push(1,2,3);
    for(int i=1; i<=n; i++)
    {
        from=qr(1,1,n,i);
        dp[i].first=calc(from,i)+plm;
        dp[i].second=dp[from].second+1;
        update(1,1,n,i);
    }
    return dp[n].second;
}
int main()
{
    int i,j,k,l,m,val;
    long double st=-1e9,dr=1e9,mij;
    cin>>n>>m;
    for(i=1; i<=n; i++)
    {
        cin>>v[i];
    }
    sort(v+1,v+n+1);
    for(i=1; i<=n; i++)
    {
        spar[i]=spar[i-1]+v[i];
    }
    for(i=1; i<=90; i++)
    {
        mij=(st+dr)/2;
        val=check(mij);
        if(val==m)
        {
            break;
        }
        else if(val>m)
        {
            st=mij;
        }
        else
        {
            dr=mij;
        }
    }
    cout<<fixed<<setprecision(12)<<dp[n].first-dp[n.second]*mij;
    return 0;
}

详细

answer.code: In function ‘int main()’:
answer.code:131:53: error: request for member ‘second’ in ‘n’, which is of non-class type ‘int’
  131 |     cout<<fixed<<setprecision(12)<<dp[n].first-dp[n.second]*mij;
      |                                                     ^~~~~~