1028: 可乐
队列,栈,优先队列没有clear函数,使用{}清空

#include <bits/stdc++.h>
using namespace std;
const int N=35;
int n,l;
typedef long long ll;
ll c[N];
struct node{
int v;
ll c;
double w;
bool operator<(const node& a)const{
return w>a.w;
}
};
priority_queue<node> que;
int main(){
while(scanf("%d%d",&n,&l)!=EOF){
que ={};
int v=1;
for(int i=1;i<=n;i++){
scanf("%lld",&c[i]);
que.push({v,c[i],1.0*c[i]/v});
v*=2;
}
ll min1= LLONG_MAX;
ll sum=0;
while(!que.empty()){
auto now=que.top();
// cout<<now.v;
que.pop();
sum = sum + l/now.v*now.c;
// cout<<" "<<sum<<" ";
l=l%now.v;
// cout<<l<<" ";
if(l==0){
min1 =min(sum,min1);
break;
}else{
min1 = min(sum+now.c,min1);
}
// cout<<min1<<endl;
}
// while(!que.empty()){ //也可以这样清空优先队列
// que.pop();
// }
printf("%lld\n",min1);
}
return 0;
}

浙公网安备 33010602011771号