백준
13458 시험 감독
불타는강정
2019. 10. 3. 18:38
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000000];
int main() {
int n, b, c;
int sum = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d %d", &b, &c);
for(int i = 0; i < n; i++)
sum += (max(a[i]-b, 0)+c-1)/c + 1;
printf("%d", sum);
}
열심히 알고리즘을 짰고
기분좋게 돌렸는데 틀렸다!
심지어 입력예시 다 돌려봤는데 에러도 안 떴는데!
#include <iostream>
#include <algorithm>
using namespace std;
using i64 = long long;
int a[1000000];
int main() {
int n, b, c;
i64 sum = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d %d", &b, &c);
for(int i = 0; i < n; i++)
sum += ((max(a[i]-b, 0)+c-1)/c + 1);
printf("%lld", sum);
}
계속 머리 싸매다가 알고보니 계산에서 오버플로우 때문에 터졌다.
입력 받을 때 최대 값이 10^6 이라 int로 해도 될 줄 알았는데, 감독관의 합을 구할 때 문제가 생겼다.
만약 시험장이 10^6개고 응시자가 10^6명인데, 감독관은 한명씩 밖에 없다면 10^6 x 10^6 = 10^12이 되어 백퍼 터진다.
이렇게도 터질 수 있구나..
틀렸을때 이 원인도 고려해야겠다....