首先我们看到使用完ai 就会把这个数组中所有的ai都删掉所以我们可以考虑使用set去存储,直接去重,每个数只用一次,并且,我们贪心的去想,最小使用次数,所以优先数大的去乘,而set自带排序(从小到大)我们可以使用greater<int>来使得set变为从大到小,也可以把每个数存放进的时候,存放成负数,这样越大的也就越小。取来用的时候再将其变成正数就行了。

需要注意的是x这个数是一直在乘的,它会超出int的范围,所以需要定义为long long。而其他的都在int的范围内。

#include <bits/stdc++.h>
#include <set>
#include <vector>
using namespace std;
long long x;
int y,n;
int main() {
    cin>>x>>y>>n;
    set<int> s;
    for(int i=1;i<=n;i++){
        int z;
        cin>>z;
        s.insert(-z);
    }
    int ans=0;
    if(x>=y) {
        cout<<ans<<endl;
        return 0;
    }
    for(auto it:s){
        it=-it;
        x=x*it;
        ans++;
        if(x>=y) {
            cout<<ans<<endl;
            return 0;
        }
    }
    cout<<-1<<endl;
    return 0;

}
// 64 位输出请用 printf("%lld")