CSP-J 준결승 스프린트 필수 질문 | P5682 최대값

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

Guess you like

Origin blog.csdn.net/guolianggsta/article/details/133485166