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;
}
相关推荐
小屁孩大帅-杨一凡12 分钟前
如何解决ThreadLocal内存泄漏问题?
java·开发语言·jvm·算法
Y1nhl2 小时前
力扣_二叉树的BFS_python版本
python·算法·leetcode·职场和发展·宽度优先
向阳逐梦3 小时前
PID控制算法理论学习基础——单级PID控制
人工智能·算法
2zcode3 小时前
基于Matlab多特征融合的可视化指纹识别系统
人工智能·算法·matlab
Owen_Q4 小时前
Leetcode百题斩-二分搜索
算法·leetcode·职场和发展
矢志航天的阿洪4 小时前
蒙特卡洛树搜索方法实践
算法
UnderTheTime4 小时前
2025 XYD Summer Camp 7.10 筛法
算法
zstar-_4 小时前
Claude code在Windows上的配置流程
笔记·算法·leetcode
圆头猫爹5 小时前
第34次CCF-CSP认证第4题,货物调度
c++·算法·动态规划
秋说5 小时前
【PTA数据结构 | C语言版】出栈序列的合法性
c语言·数据结构·算法