POTION 마법의 물약 질문입니다 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 빠른 답변을 받으시려면: 구문강조가 잘 되도록 글을 수정해 주세요. 어떤 결과를 받고 계신지 알려주시고, 가능한한 어떤 알고리즘을 썼는지 설명해 주세요. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
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){
}
int main(void){
}
답은 정확하게 나옵니다만 왜인지 모르겠습니다
최소공배수를 구해 그값을 ri에 나눈뒤 그 나눈 값을 더해가면서 pi과 비교하여 모든 수가 더 크도록 하였으며
ri이 한개일 경우 pi보다 크면 두수의 차를 pi이 더 크면 0을 출력하도록 만들었습니다
10년 전