P5682 [CSP-J2019 江西] 次大值% 运算 set 去重的一道好题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int n, x, len, a[100010], ans;
set<int> s;
set<int>::iterator asd;
int main()
{
    /*
    a[n-1]  是最大的
    a[n-2]  可能是次大的
    a[n]%a[n-1]<a[n-1] 不可能是最大的,可能是次大的
    a[n-1]%a[n-2]<a[n-2]  不可能是次大的
    a[n-2]%a[n-3]<a[n-3]  不可能是次大的
    所以次大值在a[n-2]和a[n]%a[n-1]中取得,为两者中的最大值
    */
    scanf("%d", &n);
    //set会自动从小到大排序
    for(int i=1; i<=n; ++i){
        scanf("%d", &x);
        s.insert(x);
    }
    n=int(s.size());    //获取不重复的数字个数
    asd=s.begin();
    //将数字存在a数组中
    for(int i=1; i<=n; ++i){
        a[i]=*asd;  //asd 是迭代器
        asd++;
    }
    //原数只有 1 个
    if(n==1){
        printf("-1");
    }
    else if(n==2){  //原数有两个, 则余数为 a[n-1] 和 a[n]%a[n-1]<a[n-1]
        printf("%d", a[n]%a[n-1]);
    }
    else{   //原数至少 3 个
        ans=max(a[n]%a[n-1], a[n-2]);
        printf("%d", ans);
    }
    return 0;
}
相关推荐
happymaker06265 分钟前
LeetCodeHot100——42.接雨水
算法
阿正的梦工坊44 分钟前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
八解毒剂2 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
运行时记录2 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz3 小时前
算法总结(二分查找、双指针)
c++·算法
qq_8573058193 小时前
python语法
开发语言·python·算法
DXM05213 小时前
第9期|从机器学习到深度学习:AI遥感解译的进化逻辑
人工智能·算法·计算机视觉
小蒋学算法4 小时前
算法-阶乘函数后K个零
算法
weixin_307779134 小时前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
羊羊小栈5 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业