fork(1) download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define mod 1000000007
  4. typedef long long int ll;
  5. struct numinfo
  6. {
  7. ll num;
  8. ll pre;
  9. };
  10. ll gcd(ll a,ll b){
  11. if(b==0)return a;
  12. return gcd(b,a%b);
  13. }
  14. map< pair<ll,ll>, ll > mp;
  15.  
  16. ll cx,n,k1,k2,x,y,num2,num1,test,test2,top1,top2,dig2,dig1;
  17.  
  18. int main(int argc, char const *argv[])
  19. {
  20. cin.sync_with_stdio(0);
  21.  
  22. cin>>n;
  23. cin>>k1;
  24. num1=0;
  25. cx=0;
  26. test=test2=0;
  27. for (int i = 0; i <k1; ++i)
  28. {
  29. cin>>x;
  30. if(x==10)
  31. {
  32. test=1;
  33. }
  34. num1=num1*10+x%10;
  35. }
  36. cin>>k2;
  37. num2=0;
  38. for (int i = 0; i < k2; ++i)
  39. {
  40. cin>>x;
  41. if(x==10)
  42. {
  43. test2=1;
  44. }
  45. num2=num2*10+x%10;
  46. }
  47. while(1)
  48. {
  49.  
  50. // cout<<num1<<" "<<num2<<endl;
  51. x=num1;
  52. y=num2;
  53. dig1=dig2=0;
  54. if(mp[make_pair(num1,num2)]==1)
  55. {
  56. cout<<"-1"<<endl;
  57. return 0;
  58. }
  59. mp[make_pair(num1,num2)]=1;
  60. while(x>0)
  61. {
  62. top1=x;
  63. x=x/10;
  64. dig1++;
  65. }
  66. while(y>0)
  67. {
  68. top2=y;
  69. y=y/10;
  70. dig2++;
  71. }
  72. if (dig1+dig2==n && (num1==0 || num2==0 ) )
  73. {
  74. break;
  75. }
  76. if (dig1+dig2!=n && ( num1==0 || num2==0 ) )
  77. {
  78. if (test==1 && num2==0)
  79. {
  80. break;
  81. }
  82. if (test2==1 && num1==0)
  83. {
  84. break;
  85. }
  86.  
  87. }
  88.  
  89. if(dig1+dig2!=n)
  90. {
  91. if(test==1)
  92. {
  93. ll mo;
  94. num1=(((num1)*10+top2)*10);
  95. mo=pow(10,dig2-1);
  96. num2=num2%mo;
  97. }
  98. if(test2==1)
  99. {
  100. ll mo;
  101. num2=(((num2)*10+top1)*10);
  102. mo=pow(10,dig1-1);
  103. num1=num1%mo;
  104. }
  105. }
  106. else
  107. {
  108. if(top1>top2)
  109. {
  110. ll mo=pow(10,dig1-1);
  111. num1=(((num1%mo)*10+top2)*10+top1);
  112. mo=pow(10,dig2-1);
  113. num2=num2%mo;
  114. }
  115. else
  116. {
  117. ll mo=pow(10,dig2-1);
  118. num2=(((num2%mo)*10+top1)*10+top2);
  119. mo=pow(10,dig1-1);
  120. num1=num1%mo;
  121. }
  122. }
  123.  
  124. cx++;
  125. }
  126. cout<<cx<<" ";
  127. if(num2==0)
  128. {
  129. cout<<"1"<<endl;
  130. return 0;
  131. }
  132. if (num1==0)
  133. {
  134. cout<<"2"<<endl;
  135. }
  136.  
  137. return 0;
  138. }
  139.  
Success #stdin #stdout 0s 3280KB
stdin
6
2 6 5
4 1 2 3 4
stdout
6 1