如何摆脱TLE

How to get rid of TLE?

本文关键字:TLE 何摆脱      更新时间:2023-10-16

我用蛮力解决了以下挑战:

给定N个袋子,每个袋子里有Ai巧克力。有一个孩子和一个魔术师。在一个单位时间内,孩子随机选择一个袋子i,吃掉Ai巧克力,然后魔术师将第i袋装满地板(Ai/2)巧克力。

给定Ai为1 <= i <= N,找出巧克力的最大数量可以在K个单位时间内吃东西。

例如,

K = 3 N = 2 A = 6 5

返回:14

在t = 1时,孩子从0号袋子里吃了6块巧克力,袋子里装满了3块巧克力在t = 2时,孩子从1号袋子里吃了5块巧克力t = 3时,孩子从0号袋子里吃了3块巧克力,袋子里装了1块巧克力所以,巧克力的总数吃:6 + 5 + 3 = 14

注意:返回你的答案模10^9+7

首先取向量对中的数组,其中第一个元素是值,第二个元素是索引。然后我从向量中找到最大值,也改变这个值。

不幸的是,这需要很长时间。
有没有更好的办法?

int Solution::nchoc(int A, vector<int> &B) {
   vector<pair<int, int> >vc;
    for(int i=0; i<B.size(); i++)
    {
        vc.push_back(make_pair(B[i],i));
    }
    int sum=0;
    while(A>0)
    {
        pair<int,int> x=*max_element(vc.begin(),vc.end());
        int x1=x.first;
        vc[x.second].first= (int) vc[x.second].first/2;
        sum=((sum%1000000007)+(x1%1000000007))%1000000007;
        A--;
    }
    return sum;
}

你的算法是O(N*K)阶的,因为你每一步检查每个袋子。

相反,使用a i的堆,并且总是取O(K*log N)阶算法的顶元素。

你想从<algorithm>中得到push_heap, pop_heapmake_heap