思路
本题我们可以这么想:
我们可以先把每个口罩用的不舒适度极限(即不超过 )的每天的不舒适度存入数组。举个例子:如果 ,,那么我们将存入数组中:2 4 8 16。
存完以后,我们将数组sort一下,就得到了从小往大的使用不舒适度排序(因为不舒适度不会减少,所以可以保证再用一次的不舒适度一定是按顺序排列的)。
接下来我们使用while循环,计算使用天数。
这样一来这题是不是很简单呢?
#include<bits/stdc++.h>
using namespace std;
int a[10000001],p[100001];
int k,n,ans,t=1,i=0;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>p[i];//输入不多讲
for(int j=1;j<=n;j++){//开始存不舒适度
while(p[j]<=k){//每个口罩使用的极限
a[t]=p[j];
p[j]*=2;//不舒适度翻倍存入数组中
t++;//数组项数++
}
}
t--;//用while的话t回多出来1这是一个需要注意的点
sort(a+1,a+t+1);;
while(ans<=k){
ans+=a[i];
i++;//i为天数
}
i-=1;//由于会多算一天所以这里-1
cout<<i;
return 0;
}