Submission #18557

#TimeUsernameProblemLanguageResultExecution timeMemory
18557imsifileMin-cost GCD (GA9_mcg)C++98
57 / 100
428 ms1084 KiB
#include<stdio.h> #include<memory.h> typedef long long lld; lld a, b, p, q, dy[70][2], chk[70][2]; lld gcd(int ix, lld a, lld b){ if(!a || !b)return 0; if(a<b){ if(chk[ix][0])return dy[ix][0]; chk[ix][0]=1, dy[ix][0]=gcd(ix+1,a,b%a)+2*p; if(b/a <= (2*p)/q)dy[ix][0]=gcd(ix+1,a,b%a)+(b/a)*q; return dy[ix][0]; } else{ if(chk[ix][1])return dy[ix][1]; chk[ix][1]=1, dy[ix][1]=gcd(ix+1,b,a%b)+p; lld tmp=dy[ix][1]-gcd(ix+1,a%b,b); if(a/b <= tmp/q)dy[ix][1]-=tmp-(a/b)*q; return dy[ix][1]; } return 0; } int main(){ int t; for(scanf("%d",&t);t--;){ scanf("%lld%lld%lld%lld", &a, &b, &p, &q); memset(chk,0,sizeof(chk)); printf("%lld\n", gcd(0,a,b)); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...