작성일 : 18-05-17 21:26
2017년 중등부 2번
 글쓴이 : 양진혁(yangjh05)
조회 : 2,068  
#include <stdio.h>
#include <algorithm>

using namespace std;

int N, cnt, start;

struct data{
    int x, y;
    bool operator<(const data &r) const {
        return x != r.x ? x < r.x : y < r.y;
    }
}a[2000000], b[500000];

void setting(){
    int i, sw = 0;
    for(i = start; i < N + start; i++){
        if(a[i].x == a[i + 1].x && a[i].y * a[i + 1].y < 0){
            if(!sw) b[cnt].x = a[i].x;
            else b[cnt++].y = a[i].x;
            sw = 1 - sw;
        }
    }
    for(i = 0; i < cnt; i++){
        if(b[i].x > b[i].y) swap(b[i].x, b[i].y);
    }
    sort(b, b + cnt);
}

void output(){
    int ans1 = 1, ans2 = 1, flag = b[0].y;
    for(int i = 1; i < cnt; i++){
        if(b[i].x > flag){
            ans1++;
            flag = b[i].y;
        }
        if(b[i - 1].y < b[i].x) ans2++;
    }

    printf("%d %d", ans1, ans2);
}

int main()
{
    scanf("%d", &N);
    for(int i = 0; i < N; i++){
        scanf("%d %d", &a[i].x, &a[i].y);
        a[i + N] = a[i];
        if(a[i] < a[start]) start = i;
    }

    setting();
    output();
    return 0;
}
이게 선생님이 쓰신 코드랑 똑같은데... 왜 38점이 나오는 거죠?

컴스쿨 18-05-18 11:01
 
if(a[i].x == a[i + 1].x && a[i].y * a[i + 1].y < 0)

이 부분에서 a[i].y * a[i + 1].y 결과값이 int 범위를 벗어나는 경우 값이 왜곡됩니다.

(long long)a[i].y * a[i + 1].y 이렇게 수정하면 해결됩니다.

실제 코드는 수정했는데 강의파일에 수정이 안됐습니다. 죄송합니다.

강의는 곧 수정해 놓겠습니다.

감사합니다.
 
 

Total 651
번호 제   목 글쓴이 날짜 조회
591 맛보기 영상이 재생이 안되요 남지윤 08-18 1979
590 문자열2 형성평가5 번 (1) 정주영 07-28 3844
589 자기주도 c언어 함수3-4번 문제 (1) 만수 06-19 2179
588 입금 확인 부탁드립니다. (1) 이홍국 06-14 2113
587 수강연장규정 (1) 허종 06-12 1915
586 입금확인 부탁드립니다. (1) 윤일용 06-10 1952
585 입금했습니다. (1) 장상우 05-29 1894
584 강의 오류 (1) 양진혁 05-27 2114
583 2012 중2 전시장 (1) 양진혁 05-21 2179
582 입금확인부탁드립니다. (1) 김필애 05-19 1881
581 2017년 중등부 2번 (1) 양진혁 05-17 2069
580 격자상의 경로 메모리 과다 (2) 양진혁 05-11 2138
579 2017전국대회 강좌신청 (1) 김선이 05-10 2014
578 중등부 트리 2 (2) 양진혁 05-06 2103
577 중등부 트리 (1) 양진혁 05-06 2100
576 2017년 KOI 고등부 3,4번 풀이 (1) 윤상현 05-02 2363
575 입금 확인 부탁 드립니다. (1) 임원석 04-16 1870
574 입금확인 해주세요 (1) 황현희 04-09 1802
573 입금했습니다. 수강처리 부탁드립니다. (1) 김문수 04-09 2101
572 입금확인 부탁드립니다. (1) 김성규 04-07 2119
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30    

회사소개 | 개인정보처리방침 | 이용약관 | 찾아오시는 길 | 이메일주소 무단수집거부 | 사업자정보확인
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호 한컴에듀케이션(주) TEL : 031-388-8840 FAX : 031-388-0996
대표자 : 김동규 사업자번호 : 130-86-02870 통신판매업신고번호 : 제 2010-경기안양-888호
COPYTIGHT(C) 한컴에듀케이션(주), ALL RIGHT RESERVED.
담은강좌 : 0