POTION 마법의 물약 질문입니다

  • moonsik
    moonsik

    #include

    int c,n;
    int ri[200];
    int ri_gcd[200];
    int ri_ori[200];
    int pi[200];
    int a,b;
    int h,i,j;

    int getgcd(int a,int b){

    if(b==0)
        return a;
    
    else
        return getgcd(b,a%b);

    }

    int main(void){

    scanf("%d",&c);
    for(i=0;i<c;i++){
        scanf("%d",&n);
        for(j=0;j<n;j++){
            scanf("%d",&ri[j]);
            ri_ori[j]=ri[j];
        }
        for(j=0;j<n;j++){
            scanf("%d",&pi[j]);
        }
        int gcd =1;
        for(j=0;j<n-1;j++){
            if(ri[j]==0){
                continue;
            }
            if(ri[j]>ri[j+1]){
                a=ri[j];
                b=ri[j+1];
            }else{
                a=ri[j+1];
                b=ri[j];
            }
    
            gcd=getgcd(a,b);
        }
        for(j=0;j<n;j++){
            ri_gcd[j]=ri_ori[j]/gcd;
        }
        for(j=0;j<n;j++){
            if(ri[j]<pi[j]){
                if(ri_gcd[j]==0){
                    continue;
                }
                a=(pi[j]-ri[j])/ri_gcd[j];
                if((pi[j]-ri[j])%ri_gcd[j]){
                    a++;
                }
                for(h=0;h<n;h++){
                    ri[h]+=ri_gcd[h]*a;
                }
            }
        }
        if(n==1){
            if(ri_ori[0]<=pi[0])
                printf("%d\n",0);
            else
                printf("%d\n",ri_ori[0]-pi[0]);
        }
    
        else {
    
            for(j=0;j<n-1;j++){
                printf("%d ",ri[j]-pi[j]);
            }
            printf("%d",ri[n-1]-pi[n-1]);
            printf("\n");
    
        }
    }
    return 0;

    }

    답은 정확하게 나옵니다만 왜인지 모르겠습니다

    최소공배수를 구해 그값을 ri에 나눈뒤 그 나눈 값을 더해가면서 pi과 비교하여 모든 수가 더 크도록 하였으며
    ri이 한개일 경우 pi보다 크면 두수의 차를 pi이 더 크면 0을 출력하도록 만들었습니다


    10년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    빠른 답변을 받으시려면:

    1. 구문강조가 잘 되도록 글을 수정해 주세요.
    2. 어떤 결과를 받고 계신지 알려주시고, 가능한한 어떤 알고리즘을 썼는지 설명해 주세요.

    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.