[블루 브리지 컵] 잘못된 영수증

3839 단어
[블루 브리지 컵] 잘못된 영수증
최대 메모리 사용량 <64M CPU 사용량 <1000ms
[제목 설명 - Problem Description]
모 비밀 관련 기관에서 어떤 어음을 발행하였으며, 연말에 전부 회수해야 한다.
각 어음에는 고유한 ID 번호가 있습니다.연간 모든 어음의 ID 번호는 연속적이지만 ID의 시작 번호는 무작위로 선택됩니다.
스태프의 부주의로 인해 ID 번호를 입력할 때 오류가 발생하여 어떤 ID가 끊기고 다른 ID가 겹쳤다.
당신의 임무는 프로그래밍을 통해 끊긴 ID와 겹친 ID를 찾아내는 것입니다.
단호가 최대와 최소호에서 발생할 수 없다고 가정하십시오.
프로그램에서 먼저 뒤에 있는 데이터 행의 수를 나타내는 정수 N(N<100)을 입력해야 합니다.이어서 N 줄 데이터를 읽습니다.각 행의 데이터 길이는 같지 않으며 공백으로 분리된 몇 개(100개 미만)의 양의 정수(1000000 미만)입니다. 각 정수는 ID 번호를 나타냅니다.
두 개의 정수 mn을 포함하는 한 줄을 출력하고 빈칸으로 구분해야 합니다.여기서 m은 세미콜론 ID를, n은 세미콜론 ID를 나타냅니다.
[샘플 1 - Sample Input 1 입력]
[샘플 내보내기 1 - Sample Output 1]
25 6 8 11 9 10 12 9
7 9
[샘플 2 입력 - Sample Input 2]
[샘플 내보내기 2 - Sample Output 2]
6164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196172 189 127 107 112 192 103 131 133 169 158 128 102 110 148 139 157 140 195 197185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
105 120
[문제풀이]
1~10W의 데이터 양이 크지 않을 테니 계수 정렬을 하면 해결할 수 있다.
[코드 C++]
 1 #include<cstdio>
 2 #define mx 100005
 3 int data[mx];
 4 int main(){
 5     int i, j, m, n;
 6     scanf("%d", &i);
 7     while (~scanf("%d", &j)){
 8         ++data[j];
 9     }
10     for (i = 0; !data[i]; ++i);
11     for (m = n = 0; !m || !n; ++i){
12         if (!data[i]) m = i;
13         if (data[i] > 1) n = i;
14     }
15     printf("%d %d", m, n);
16     return 0;
17 }

[측정 가능한 주소]http://acmore.cc/problem.php?id=1598

좋은 웹페이지 즐겨찾기