首页 > 其他分享 >P5682 [CSP-J 2019] 次大值

P5682 [CSP-J 2019] 次大值

时间:2023-10-02 15:12:08浏览次数:44  
标签:取模 正整数 int bmod 样例 次大值 2019 CSP

题目描述

传送门

Alice 有 \(n\) 个正整数,数字从 \(1 \sim n\) 编号,分别为 \(a_1,a_2, \dots , a_n\)。
Bob 刚学习取模运算,于是便拿这 \(n\) 个数进行练习,他写下了所有

\[a_i \bmod a_j (1 \le i,j \le n \wedge i \neq j) \]

的值,其中 \(\bmod\) 表示取模运算。

Alice 想知道所有的结果中,严格次大值是多少。将取模后得到的所有值进行去重,即相同的结果数值只保留一个,剩余数中第二大的值就称为严格次大值。

输入格式

第一行一个正整数 \(n\),表示数字个数。
第二行 \(n\) 个正整数表示 \(a_i\)。

输出格式

仅一行一个整数表示答案。
若取模结果去重后剩余数字不足两个,则输出 \(-1\)。

样例

样例输入

4
4 5 5 6

样例输出

4

思路

首先它要求严格次大值 所以有两个相同的数没有意义...先排序+去重
假设原序列去重后剩下的序列为\(a_1,a_2, \dots , a_n\)。

由于 \(a \bmod b <a\) 所以最大值一定是 a[n-1] mod a[n].
简单证明:

  • 1.对于 \(a_1\) 到 a[n-2] 使其取模比它们大的数 就是本身 一定比 a[n-1]小。
  • 2.如果一个数模比它小的数 被模的数不可能是 \(a_n\) 那么最后值一定小于 a[n-1].

代码实现

#include<bits/stdc++.h>
using namespace std;
int n;
int a[200005];
int main(){
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
    
	sort(a+1,a+n+1);
	n=unique(a+1,a+n+1)-a-1;
	a[0]=0;
    
	if(n<=1){
		cout<<-1<<endl;
	}
	else cout<<max(a[n-2],a[n]%a[n-1]);
	return 0;
}

标签:取模,正整数,int,bmod,样例,次大值,2019,CSP
From: https://www.cnblogs.com/j1hx-oi/p/17739941.html

相关文章

  • P8816 [CSP-J 2022] 上升点列
    Problem考察算法:\(DP\)。题目简述给你\(n\)个点,每个点有一个坐标\((x_i,y_i)\),还可以添加\(k\)个点。添加之后,求:最长的上升点列的长度。上升点列定义(两个点满足其中之一即可):\(x_{i+1}-x_{i}=1,y_i=y_{i+1}\)\(y_{i+1}-y_{i}=1,x_i=x_{i+1}\)思路设......
  • P8815 [CSP-J 2022] 逻辑表达式
    Problem考察算法:后缀表达式计算、建表达式树、\(DFS\)。题目简述给你一个中缀表达式,其中只有\(\&\)和\(\mid\)两种运算。求:\(\&\)和\(\mid\)运算中的“最短路”次数各出现了多少次。最短路的定义为:在\(a\)\(\&\)\(b\)运算中,如果\(a=0\),那么整个表达式的计算......
  • P7073 [CSP-J2020] 表达式
    Problem考察算法:后缀表达式建树,优化。题目简述读入一个后缀表达式,由\(\&,\mid,!\)三种运算和操作数构成。有\(q\)次询问,每次输入一个下标\(i\),表示要取反\(x_i\)的值。每次求表达式的值。暴力每次重新建表达式树,计算。时间复杂度:\(O(q\times|s|)\),达到了惊人的\(10......
  • P7072 [CSP-J2020] 直播获奖
    Problem考查知识点:桶优化。题目简述竞赛的获奖率为\(w\%\),即当前排名前\(w\%\)的选手的最低成绩就是即时的分数线。若当前已评出了\(p\)个选手的成绩,则当前计划获奖人数为\(\max(1,\lfloorp\timesw\%\rfloor)\),如有选手成绩相同,则所有成绩并列的选手都能获奖,因此实......
  • P7074 [CSP-J2020] 方格取数
    Problem相关算法:\(DP\)。题意简述给你一个方格图,每次只能向上、向右、向下走。现在求:经过所有点取到的数字和的最大值。思路动态规划。对于每一列而言,如果某个点向上走了,就不可能再向下走。向下走了同理。所以我们可以把两种情况都尝试一遍,每个点而言,如果是处于向下的状态......
  • CSP模拟30
    CSP模拟30难得改完一次题,写篇题解祭一下A.枫(P7485「Stoi2031」枫)考场居然打了个高分暴力我的思路:假设我们已知最后一个数,逆推,不断往该数前(或后)加了多少数,直至完成这个操作。荣获$96pts$的好成绩评测记录代码如下:#include<bits/stdc++.h>usingnamespacestd;constin......
  • P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II 题解
    Description给你一个长为\(n\)的排列,\(m\)次询问,每次查询一个区间的逆序对数,强制在线。link\(1\leqn,m\leq10^5\)。Solution考虑分块。首先如果\(l,r\)在同一个块内,可以对于每个块暴力二维前缀和预处理。如果\(l,r\)在不同的块内。设\(bel[l]=x,bel[r]=y\)。首......
  • CSP2023 游记
    前言:之所以不在标题中加上&这个字符以及后面那几个字,是准备在复赛后加。今年没报J。下文的qbn,yh,lyl,yts。正文:初赛:每次敲code都用g++编译,甚至暑假在jcsy的时候由于配置VC较麻烦,直接手敲命令的,结果选择题第11题还对不了。。。阅读程序最后一题连错两道......
  • CSP-S 2021 廊桥分配 题解
    part1:题目描述:当一架飞机抵达机场时,可以停靠在航站楼旁的廊桥,也可以停靠在位于机场边缘的远机位。乘客一般更期待停靠在廊桥,因为这样省去了坐摆渡车前往航站楼的周折。然而,因为廊桥的数量有限,所以这样的愿望不总是能实现。机场分为国内区和国际区,国内航班飞机只能停靠在国内......
  • 2023 CSP-S 备战
    2023CSP-S备战日常犯智9.29Dinic中,如果rest为\(0\),直接终止循环。intdinic(intu,intflow){ if(u==T)returnflow; intrest=flow; for(inti=now[u];i&&rest;i=edge[i].nxt){//rest now[u]=i; intv=edge[i].v,c=edge[i].c; ......