如何摆脱TLE
How to get rid of TLE?
我用蛮力解决了以下挑战:
给定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_heap
和make_heap
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 尝试摆脱任何堆内存分配
- 如何摆脱C ++中的分段错误错误?
- 在 c++ 中使用 vtd-xml 时,如何摆脱 EOFException?
- 如何摆脱为条件编译定义预处理器宏的需要?
- 在C++中释放内存期间,迭代器与指针有何不同
- GTK:完全摆脱系统主题/CSS
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- transform_reduce & 摆脱 for 循环
- 如何摆脱算术溢出
- 如何摆脱错误c2061;语法错误 cout?
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 如何摆脱这个做同时循环?
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- 我必须构建才能摆脱 Eclipse 中的错误吗?
- 如何摆脱TLE