问题标题: 酷町堂:5077 未了

0
0
已解决
李源徽
李源徽
新手光能
新手光能

35分

求ac思路

李源徽在2020-11-06 20:13:48追加了内容

#include<iostream>
#include<algorithm>
#define MAXN 200010
using namespace std;
int l,v,n,a[MAXN],q;
double ans[MAXN],k;
int find(double y)
{
    if(y<k)
    return 0;
    int l=1,r=n;
    while(l<r)
    {
        int mid=(l+r)/2;
        if(ans[mid]+k>y)
        r=mid;
        else
        l=mid+1;
    }
    if(ans[l]+k>y)
    return l;
    return -1;
}
bool cmp(int a,int b)
{
    return a>b;
}
int main()
{
    cin>>n>>l>>v;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    cin>>q;
    for(int i=1;i<=n;i++)
    {
        ans[i]=ans[i-1]+1.0*a[i]/v;
    }
    k=l/v;
    while(q--)
    {
        double y;
        cin>>y;
        cout<<find(y)<<endl;
    }
}


0
已采纳
蔡乐毅
蔡乐毅
高级光能
高级光能

前缀和

f[i]=用i个魔法所拖延的最大时间(double)

依次循环

找到第一个比询问大的f[i]

找不到输出-1

但是

这样还是会超时

要用二分查找

蔡乐毅在2020-11-06 20:31:04追加了内容

你还要设一个边界

ans[0]=l*1.0/v;

0
0
0
我要回答