题解 | #小欧的选数乘积#

小欧的选数乘积

https://www.nowcoder.com/practice/a94f523ebe424d0481533dc9e6138724?tpId=376&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E9%259D%25A2%25E8%25AF%2595%26topicId%3D376

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

#牛客创作赏金赛#
15天大厂真题带刷 文章被收录于专栏

15天大厂真题带刷题解

全部评论
使用set去重妙啊
点赞 回复 分享
发布于 2024-11-29 11:33 北京

相关推荐

点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务