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