Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Problema risipa
- //Autor : Adrian Panaete
- //100 puncte
- #include<stdio.h>
- #include<string.h>
- char S[110];
- long N[110],T,M,L,D,i,j,n,r,v[20010];
- long REST();
- void STOI(),ADUN(long),IMPART();
- int main()
- {
- freopen("risipa.in","r",stdin);
- freopen("risipa.out","w",stdout);
- scanf("%s",S);
- scanf("%ld%ld",&T,&M);
- T=3*T+2;
- M=3*M+1;
- STOI();r=REST();
- while(L>=6)
- {
- if(r==0){D++;
- IMPART();
- r=REST();continue;}
- if(r==1){D++;
- ADUN(T);
- r=0;continue;}
- if(r==2){D++;
- ADUN(M);
- r=0;continue;}
- }
- for(i=0,j=1;i<L;i++,j*=10)n+=N[i]*j;
- for(;;)
- {
- D++;
- if(n<=20000&&v[n])break;
- if(n<=20000)v[n]=D;
- if(n%3==1)n+=T;
- else if(n%3==2)n+=M;
- else n/=3;
- if(n>=20000)continue;
- }
- printf("%ld\n",n);
- printf("%ld %ld",v[n],D);
- return 0;
- }
- void STOI()
- {
- L=strlen(S);
- for(i=L-1,j=0;i>=0;i--,j++)N[j]=S[i]-'0';
- }
- void ADUN(long X)
- {
- N[0]+=X;
- for(i=0;i<L;i++){N[i+1]+=N[i]/10;N[i]%=10;}
- for(;N[L];){N[L+1]+=N[L]/10;N[L]%=10;L++;}
- }
- void IMPART()
- {
- for(i=0;i<=L;i++)
- while(N[i]%3){N[i]+=10;N[i+1]--;}
- while(!N[L-1])L--;
- for(i=L-1;i>=0;i--)N[i]/=3;
- }
- long REST()
- {
- long s=0;
- for(i=0;i<L;i++)s+=N[i];
- return s%3;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement