[질문]
2번째 참가 코린이 C번 질문
익명(122.45)
2020-04-22 01:56
추천 0
#include <bits/stdc++.h>
using namespace std
;
int tc
, n
, a
[200001], b
[200001];
queue
<long long> q
;
int main() {
scanf("%d", &tc
);
while (tc
--) {
scanf("%d", &n
);
memset(a
, 0, sizeof(a
));
memset(b
, 0, sizeof(b
));
for (int i
= 0; i
< n
; i
++) {
scanf("%d", &a
[i
]);
}
int idx
= 0;
for (int i
= 0; i
< n
; i
++) {
long long m
= -1000000001;
q
.push(a
[i
]);
if (i
== n
-1 || a
[i
] * a
[i
+1] < 0) {
while (!q
.empty()) {
if (q
.front() >= m
) {
m
= q
.front();
}
q
.pop();
}
b
[idx
++] = m
;
}
}
long long ans
= 0;
for (int i
= 0; i
< idx
; i
++) {
ans
+= b
[i
];
}
printf("%lld\n", ans
);
}
return 0;
}틀린 코드
#include <bits/stdc++.h>
using namespace std
;
long long tc
, n
, a
[200001], b
[200001];
queue
<long long> q
;
int main() {
scanf("%lld", &tc
);
while (tc
--) {
scanf("%lld", &n
);
memset(a
, 0, sizeof(a
));
memset(b
, 0, sizeof(b
));
for (int i
= 0; i
< n
; i
++) {
scanf("%lld", &a
[i
]);
}
long long idx
= 0;
for (int i
= 0; i
< n
; i
++) {
long long m
= -1000000001;
q
.push(a
[i
]);
if (i
== n
-1 || a
[i
] * a
[i
+1] < 0) {
while (!q
.empty()) {
if (q
.front() >= m
) {
m
= q
.front();
}
q
.pop();
}
b
[idx
++] = m
;
}
}
long long ans
= 0;
for (int i
= 0; i
< idx
; i
++) {
ans
+= b
[i
];
}
printf("%lld\n", ans
);
}
return 0;
}맞은 코드
계속 틀려서 짜증나서 모든 변수를 long long 으로 바꿨더니 갑자기 맞았어요... 배열 원소의 크기가 10^9 까지니까 int써도 되는거 아닌가요??..
틀왜맞은 처음 경험해봅니다 ㅠㅠ
질문만 읽어봤지만 그 sum한게 int 범위 넘어가서 그런거 아님?
sum 한건 그럴거같아서 long long으로 선언한 ans 변수에다가 넣어놨습니다 ㅠㅠ 그래서 변함은 없는데.. 배열을 long long으로해서 맞은건지...
10^9 계속 더하면 int 범위 초과할 수 있음
예제코드 어케통과햇누
a[i] * a[i+1] < 0 여기서 int 넘김
와 생각도못했네 감사합니다
아 통과는 하겠네 a[i] * a[i+1] 여기서 오버플로우
감사합니다 꿀잠잘게요 감사합니다