fork download
  1. #include<stdio.h>
  2. #include<unordered_set>
  3. #include<algorithm>
  4. #include<assert.h>
  5. using namespace std;
  6. int main(){
  7. int t;
  8. scanf("%d",&t);
  9. while(t--){
  10. int a,b;
  11. scanf("%d%d",&a,&b);
  12. //assert(1<=a&&a<=1'000'000'000);
  13. //assert(1<=b&&b<=1'000'000'000);
  14. unordered_set<int> ss;
  15. if((a+b)%2==0){
  16. while(a!=b){
  17. if(a>b)swap(a,b);
  18. //if(a==0)break;
  19. int d=b-a;
  20. int e=d/a;
  21. int f=0;
  22. while(f*2LL+2<=e)f=f*2+2;
  23. b-=f/2*a;
  24. a+=f/2*a;
  25. printf("%d %d %d %d\n",a,b,d,f);
  26. if(a==b)break;
  27. if(ss.find(b-a)!=ss.end())break;
  28. ss.insert(b-a);
  29. b-=a;
  30. a+=a;
  31. }
  32. }
  33. printf("%s\n",(a==b)?"YES":"NO");
  34. }
  35. }
Success #stdin #stdout 0.01s 5296KB
stdin
1
1001 999
stdout
999 1001 2 0
512 1488 1996 510
976 1024 48 0
768 1232 1904 30
928 1072 1072 2
576 1424 1712 6
848 1152 304 0
608 1392 1392 2
784 1216 432 0
864 1136 1136 2
544 1456 1456 2
912 1088 176 0
704 1296 1648 6
592 1408 816 0
816 1184 368 0
736 1264 1264 2
528 1472 944 0
944 1056 112 0
896 1104 1776 14
832 1168 1584 6
672 1328 1328 2
656 1344 688 0
688 1312 624 0
624 1376 752 0
752 1248 496 0
992 1008 1008 2
512 1488 1968 62
NO