Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //numbers bigger than long long
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<stdlib.h>
- #include<malloc.h>
- #include<vector>
- #include<algorithm>
- #include<stack>
- #include<queue>
- #include<list>
- #define min(a,b) (a>b?b:a)
- #define max(a,b) (a>b?a:b)
- #define packetsize 1000000
- #define p_len 6
- #define p packetsize
- #define numberlength 300000 //say
- #define NN numberlength/p_len
- using namespace std;
- struct num {
- int len;
- int it[NN];
- num(long long n=0) {
- for(len=0; n ; n/=p)
- it[len++]=n%p;
- }
- };
- num operator*(num a,num b)
- {
- num prod(0);
- memset(prod.it,0,sizeof prod.it); //its a must dont forget it
- if(b.len==0 || a.len==0)
- return prod;
- int i,j,div;
- for(i=0; i<a.len; i++) {
- if(a.it[i]>0) {
- div=0;
- for(j=0; j<b.len; j++) {
- div+=prod.it[i+j]+a.it[i]*b.it[j];
- prod.it[i+j]=div%p;
- div/=p;
- }
- if(div>0) prod.it[i+j]=div;
- }
- }
- prod.len=a.len+b.len;
- if(prod.it[prod.len-1]==0) prod.len--;
- return prod;
- }
- num operator+(num a,num b)
- {
- num c;
- int l=min(a.len,b.len);
- int tmp=0;
- int i;
- for(i=0;i<l;i++){
- tmp+=a.it[i]+b.it[i];
- c.it[c.len++]=tmp%p;
- tmp/=p;
- }
- while(i<a.len){
- c.it[c.len++]=tmp+a.it[i++];
- tmp=0;
- }
- while(i<b.len){
- c.it[c.len++]=tmp+b.it[i++];
- tmp=0;
- }
- if(tmp!=0){
- c.it[c.len++]=tmp;
- }
- return c;
- }
- num operator-(num a,num b)
- {
- int i,dif=0;
- num ans;
- for(i=0; i<a.len; i++) {
- dif+=a.it[i]-(i<b.len?b.it[i]:0)+2*p;
- ans.it[i]=dif%p;
- dif=dif/p-2;
- }
- for(; i-->=0 && ans.it[i]==0;);
- ans.len=i+1;
- return ans;
- }
- void print(num);
- num operator/(num a,num b)
- {
- num c(0);
- print(a);
- long long div=0;
- for(int i=a.len-1;i>=0;i--){
- div=div*p;
- div+=a.it[i];
- c=c*num(p);
- c=c+num(div/2);
- div%=2;
- }
- while(c.it[c.len-1]==0 && c.len>0)
- c.len--;
- return c;
- }
- void print(num a)
- {
- if(a.len==0)
- printf("0");
- else {
- long i=a.len-1;
- printf("%d",a.it[i]);
- char s[10];
- sprintf(s,"%%0%dd",p_len);
- for(i--; i>=0; i--)
- printf(s,a.it[i]);
- }
- printf("\n");
- }
- string s="0";
- string rev(string s)
- {
- for(int i=0;i<s.length();i++){
- if(s[i]=='0')
- s[i]='1';
- else
- s[i]='0';
- }
- return s;
- }
- int solve(num k)
- {
- if(k.len<=1)
- return s[(int)k.it[0]]-'0';
- else{
- if(k.it[0]%2==0){
- return solve(k/num(2));
- }
- else{
- return (1-solve(k/num(2)));
- }
- }
- }
- int main()
- {
- while(s.length()<1000000){
- s+=rev(s);
- }
- int t;
- cin>>t;
- while(t--){
- char c;
- cin>>c;
- int n;
- cin>>n;
- num k(0);string temp;
- cin>>temp;
- for(int i=0;i<temp.length();i++){
- k=k*num(10);
- k=k+num(temp[i]-'0');
- }
- k=k-num(1);
- int ans=solve(k);
- char d;
- if(c=='a')
- d='b';
- else
- d='a';
- if(ans==0)
- cout<<c<<endl;
- else
- cout<<d<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement