연속합이 int를 벗어날 수가 있습니다. 사실 문제에서 명시하지 않은것이 잘못이긴하죠.
1912번 - 연속합
늦었지만 저도 발견 ㅋㅋ
175
1991 -9326 -9974 4360 829 -2259 -6922 -2954 -1752 -8432 6030 -3428 292 -4902 704 4019 4247 6878 -2883 -8022 -5923 -9367 -5010 -7119 -5626 4631 8666 2424 -8063 5493 -934 3928 6168 -907 -1712 -3004 6834 1367 4043 -4919 2935 72 1654 -6773 5170 -7642 7247 -583 9236 -5637 1395 -6687 -5003 6385 -3805 -628 1016 -5140 -8204 2953 -9647 862 -3120 6521 9955 5169 -6483 6789 -3465 7561 -8130 9471 -2368 3524 -7303 -7198 5883 9945 2219 5119 -5692 -6387 8432 -694 9998 -5374 8678 1014 -513 -9527 -6034 -159 1336 847 -3638 1291 -3985 -121 -1920 2551 -2561 -50 2021 5072 -6526 4719 7874 9357 4663 92 4475 8971 3705 2906 -1723 3703 7533 -3046 -5283 -2980 -2572 -1316 6861 8765 9532 -6778 56 -4453 3102 8136 8098 -9460 -1915 118 5613 1559 -5163 3486 916 9500 -6422 -4610 8471 7284 8297 -3253 987 5830 3702 5704 -7151 -8870 -5613 9710 9896 -6082 -7069 -49 -535 6034 -1914 -2438 6574 6171 7681 2187 -2270 -7483 -4328 8647 -7983 -750 -5964 -9513 -3466
답 : 138912
위의 소스 답 : 74363
유카리코님 축하드립니다
유카리코님 ㅊㅋ드립니다 ㅋㅋㅋ
댓글을 작성하려면 로그인해야 합니다.
alphago92 8년 전
#include <stdio.h>
#include <stdlib.h>
int main(void){
int N;
int i;
int max=0;
int max2=0;
int com=0;
int m=-2147483648;
int k=0;
int* arr;
scanf("%d",&N);
arr=(int*)malloc(sizeof(int)*N);
for(i=0;i<N;i++)
scanf("%d",&arr[i]);
for(i=0;i<N;i++){
if(arr[i]>m)
m=arr[i];
if(arr[i]<0){
k+=arr[i];
max=0;
}
if(arr[i]>=0){
max+=arr[i];
max2+=arr[i];
if(max>=com)
com=max;
}
if(k!=0 && max2!=0){
if(k+max2>com)
com=k+max2;
}
}
if(m<0)
printf("%d",m);
else
printf("%d",com);
return 0;
}
코드는 이것이구요
길이가 1인경우
음수만 있는 경우
0만 있는 경우
5 -1 -1 3 같이 중간에 음수까지 더하는 경우
어떤 경우든지간에 완벽한 결과가 나옵니다
혹시 안되는 테스트케이스 발견하신분에게는 10만원 드리겠습니다.
정답률이 33%인 이유가 있습니다
-> 테스트 코드가 잘못된 것입니다
-> 사실은 오답률 33%가 맞습니다