Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.43 KB | None | 0 0
  1. //numbers bigger than long long
  2.  
  3.  
  4. #include<iostream>
  5. #include<stdio.h>
  6. #include<string.h>
  7. #include<math.h>
  8. #include<stdlib.h>
  9. #include<malloc.h>
  10. #include<vector>
  11. #include<algorithm>
  12. #include<stack>
  13. #include<queue>
  14. #include<list>
  15.  
  16.  
  17. #define min(a,b) (a>b?b:a)
  18. #define max(a,b) (a>b?a:b)
  19.  
  20. #define packetsize 1000000
  21. #define p_len 6
  22. #define p packetsize
  23. #define numberlength 300000 //say
  24. #define NN numberlength/p_len
  25.  
  26.  
  27. using namespace std;
  28.  
  29.  
  30. struct num {
  31. int len;
  32. int it[NN];
  33. num(long long n=0) {
  34. for(len=0; n ; n/=p)
  35. it[len++]=n%p;
  36. }
  37. };
  38. num operator*(num a,num b)
  39. {
  40. num prod(0);
  41. memset(prod.it,0,sizeof prod.it); //its a must dont forget it
  42. if(b.len==0 || a.len==0)
  43. return prod;
  44. int i,j,div;
  45. for(i=0; i<a.len; i++) {
  46. if(a.it[i]>0) {
  47. div=0;
  48. for(j=0; j<b.len; j++) {
  49. div+=prod.it[i+j]+a.it[i]*b.it[j];
  50. prod.it[i+j]=div%p;
  51. div/=p;
  52. }
  53. if(div>0) prod.it[i+j]=div;
  54. }
  55. }
  56. prod.len=a.len+b.len;
  57. if(prod.it[prod.len-1]==0) prod.len--;
  58. return prod;
  59. }
  60.  
  61. num operator+(num a,num b)
  62. {
  63. num c;
  64. int l=min(a.len,b.len);
  65. int tmp=0;
  66. int i;
  67. for(i=0;i<l;i++){
  68. tmp+=a.it[i]+b.it[i];
  69. c.it[c.len++]=tmp%p;
  70. tmp/=p;
  71. }
  72. while(i<a.len){
  73. c.it[c.len++]=tmp+a.it[i++];
  74. tmp=0;
  75. }
  76. while(i<b.len){
  77. c.it[c.len++]=tmp+b.it[i++];
  78. tmp=0;
  79. }
  80. if(tmp!=0){
  81. c.it[c.len++]=tmp;
  82. }
  83. return c;
  84. }
  85. num operator-(num a,num b)
  86. {
  87. int i,dif=0;
  88. num ans;
  89. for(i=0; i<a.len; i++) {
  90. dif+=a.it[i]-(i<b.len?b.it[i]:0)+2*p;
  91. ans.it[i]=dif%p;
  92. dif=dif/p-2;
  93. }
  94. for(; i-->=0 && ans.it[i]==0;);
  95. ans.len=i+1;
  96. return ans;
  97. }
  98. void print(num);
  99. num operator/(num a,num b)
  100. {
  101. num c(0);
  102. print(a);
  103. long long div=0;
  104. for(int i=a.len-1;i>=0;i--){
  105. div=div*p;
  106. div+=a.it[i];
  107. c=c*num(p);
  108. c=c+num(div/2);
  109. div%=2;
  110. }
  111. while(c.it[c.len-1]==0 && c.len>0)
  112. c.len--;
  113. return c;
  114. }
  115. void print(num a)
  116. {
  117. if(a.len==0)
  118. printf("0");
  119. else {
  120. long i=a.len-1;
  121. printf("%d",a.it[i]);
  122. char s[10];
  123. sprintf(s,"%%0%dd",p_len);
  124. for(i--; i>=0; i--)
  125. printf(s,a.it[i]);
  126. }
  127. printf("\n");
  128. }
  129. string s="0";
  130. string rev(string s)
  131. {
  132. for(int i=0;i<s.length();i++){
  133. if(s[i]=='0')
  134. s[i]='1';
  135. else
  136. s[i]='0';
  137. }
  138. return s;
  139. }
  140.  
  141. int solve(num k)
  142. {
  143. if(k.len<=1)
  144. return s[(int)k.it[0]]-'0';
  145. else{
  146. if(k.it[0]%2==0){
  147. return solve(k/num(2));
  148. }
  149. else{
  150. return (1-solve(k/num(2)));
  151. }
  152. }
  153. }
  154. int main()
  155. {
  156. while(s.length()<1000000){
  157. s+=rev(s);
  158. }
  159. int t;
  160. cin>>t;
  161. while(t--){
  162. char c;
  163. cin>>c;
  164. int n;
  165. cin>>n;
  166. num k(0);string temp;
  167. cin>>temp;
  168. for(int i=0;i<temp.length();i++){
  169. k=k*num(10);
  170. k=k+num(temp[i]-'0');
  171. }
  172. k=k-num(1);
  173. int ans=solve(k);
  174. char d;
  175. if(c=='a')
  176. d='b';
  177. else
  178. d='a';
  179. if(ans==0)
  180. cout<<c<<endl;
  181. else
  182. cout<<d<<endl;
  183. }
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement