C++를 어릴 때부터 배워보세요! CSP-J 시험 준비 학습 과정에서 문제를 기록하고 모든 순간을 기록하십시오.
요약 게시물이 첨부되어 있습니다: CSP-J 준결승 스프린트 필수 답변 질문 | 요약_프로그래밍을 사랑하는 커뮤니케이터의 블로그-CSDN 블로그
[제목 설명]
Alice는 1부터 n 까지 번호 가 매겨진 n개의 양의 정수 , 즉 a 1, a 2, … Bob은 방금 모듈러 산술을 배웠기 때문에 이 n개의 숫자를 가지고 연습했습니다 .
여기서 mod는 모듈로 연산을 나타냅니다.
Alice는 모든 결과 중에서 두 번째로 큰 값이 무엇인지 알고 싶어합니다. 모듈로를 취한 후 얻은 모든 값은 중복 제거됩니다. 즉, 동일한 결과 값 중 하나만 유지되며 나머지 숫자 중 두 번째로 큰 값을 엄격한 두 번째로 큰 값이라고 합니다.
【입력하다】
첫 번째 줄은 숫자의 수를 나타내는 양의 정수 n 입니다. 두 번째 줄의 n 개의 양의 정수는 ai 를 나타냅니다 .
【산출】
한 줄에 하나의 정수만 답을 나타냅니다. 모듈로 결과에서 중복을 제거한 후 남은 자릿수가 2보다 작으면 -1이 출력됩니다.
【입력 샘플】
4
4 5 5 6
【출력 샘플】
4
[상세 코드 설명]
#include <bits/stdc++.h>
using namespace std;
int a[200005]={0};
int main()
{
int n;
cin >> n;
for (int i=1; i<=n; i++) {
cin >> a[i];
}
sort(a+1, a+1+n);
n = (unique(a+1, a+1+n) - (a+1));
printf("%d", max(a[n-2], a[n]%a[n-1])); //如3 5 7 8 12 15 20,倒数第n-2个数12就是次大值。如 3 5 7 8 12 15 29,则a[n]%a[n-1]就是次大值。所以是去这两个值的最大值
return 0;
}
【작업 결과】
4
4 5 5 6
4