首先我们看到使用完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")

京公网安备 11010502036488号