Quick actions

cmd+k|ctrl+k

Navigation

Languages

17216

Snippet info

Language

C

Visibility

public

Author

vghjm

Created

2019-08-05T02:32:32Z

Updated

2019-08-05T02:32:32Z

#include <stdio.h>

int how_big(int *D, int index, int value);

int main(void) {
    int N;
    int A[1000];
    int D[1000];
    int sum=0;
    int index=0;
    int check;
    
    scanf("%d", &N);
    for(int i=0; i<N; i++){
        scanf("%d", &A[i]);
    }
    
    /* test input
    printf("input N=%d, input: ", N);
    for(int i=0; i<N; i++){
        printf("%d ", A[i]);
    }
    printf("\n");
    */
    
    for(int next=1; next<N; next++){
        if(A[next] < D[index]){
            index++;
            D[index] = A[next];
        }else if(A[next] > D[index]){
            check = how_big(D, index, A[next]);
            if(check==0){
                //no change
                continue;
            }else {
                //change
                index-=check-1;
                D[index] = A[next];
            }
        }
    }
    /* test calc
    printf("final D index=%d, input: ", index);
    for(int i=0; i<=index; i++){
        printf("%d ", D[i]);
    }
    printf("\n");
    */
    
    for(int i=0; i<=index; i++){
        sum+=D[i];
    }
    
    printf("%d", sum);
    
    
    
    return 0;
}

int how_big(int *D, int index, int value){
    int sum=D[index];
    int nth=1;
    
    for(int i=index-1; i>=0; i--){
        if(value > D[i]){
            sum+=D[i];
            if(value >= sum){
                nth++;
            }else {
                return 0;
            }
        }else if(value < D[i]){
            return nth;
        }else if(value == D[i]){
            return 0;
        }
    }
    
    return nth;
}
INFO