4 条题解

  • 1
    @ 2025-11-3 9:05:47

    /主要思路是找到数组中最小值的最后位置,因为越到后面钱越多,算出能买多少大红(买不了也没关系,说明前边比他大的更买不了), 然后从最小值后面开始再找最小值,重复上面操作,直到最小值为最后一个值为止/

    #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
    上传者