4 条题解
-
1
/主要思路是找到数组中最小值的最后位置,因为越到后面钱越多,算出能买多少大红(买不了也没关系,说明前边比他大的更买不了), 然后从最小值后面开始再找最小值,重复上面操作,直到最小值为最后一个值为止/
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,l=1;
int count=0;//大红数量
int money=0;
cin>>n;
vector<int>arr(n+1,0);
for(int i=1;i<=n;i++)
{
cin>>arr[i];
}
while(l<=n)//不断寻找最小值,直到最小值为最后一个值为止
{
int min=1e9,j;
for(int i=l;i<=n;i++)
{
if(arr[i]<=min)
{
min=arr[i];
j=i;//标记最小值的最后位置
}
money++;
}
money=money-(n-j);//计算到标记位置是的钱
count+=money/arr[j];//大红数量
money=money%arr[j];//购买后剩余钱
l=j+1;//从最小值后面开始再找最小值
}
cout<<count;
}
信息
- ID
- 1179
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 203
- 已通过
- 40
- 上传者