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;
}
相关推荐
草履虫建模11 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq13 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq13 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
爱吃rabbit的mq14 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
(❁´◡`❁)Jimmy(❁´◡`❁)15 小时前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi15 小时前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
不能隔夜的咖喱15 小时前
牛客网刷题(2)
java·开发语言·算法
VT.馒头15 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
进击的小头16 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机
咖丨喱17 小时前
IP校验和算法解析与实现
网络·tcp/ip·算法