Advertisement
a53

risipa

a53
Oct 4th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. //Problema risipa
  2. //Autor : Adrian Panaete
  3. //100 puncte
  4. #include<stdio.h>
  5. #include<string.h>
  6. char S[110];
  7. long N[110],T,M,L,D,i,j,n,r,v[20010];
  8. long REST();
  9. void STOI(),ADUN(long),IMPART();
  10. int main()
  11. {
  12. freopen("risipa.in","r",stdin);
  13. freopen("risipa.out","w",stdout);
  14. scanf("%s",S);
  15. scanf("%ld%ld",&T,&M);
  16. T=3*T+2;
  17. M=3*M+1;
  18. STOI();r=REST();
  19. while(L>=6)
  20. {
  21. if(r==0){D++;
  22. IMPART();
  23. r=REST();continue;}
  24. if(r==1){D++;
  25. ADUN(T);
  26. r=0;continue;}
  27. if(r==2){D++;
  28. ADUN(M);
  29. r=0;continue;}
  30. }
  31. for(i=0,j=1;i<L;i++,j*=10)n+=N[i]*j;
  32. for(;;)
  33. {
  34. D++;
  35. if(n<=20000&&v[n])break;
  36. if(n<=20000)v[n]=D;
  37.  
  38. if(n%3==1)n+=T;
  39. else if(n%3==2)n+=M;
  40. else n/=3;
  41. if(n>=20000)continue;
  42.  
  43. }
  44. printf("%ld\n",n);
  45. printf("%ld %ld",v[n],D);
  46. return 0;
  47. }
  48. void STOI()
  49. {
  50. L=strlen(S);
  51. for(i=L-1,j=0;i>=0;i--,j++)N[j]=S[i]-'0';
  52. }
  53. void ADUN(long X)
  54. {
  55. N[0]+=X;
  56. for(i=0;i<L;i++){N[i+1]+=N[i]/10;N[i]%=10;}
  57. for(;N[L];){N[L+1]+=N[L]/10;N[L]%=10;L++;}
  58. }
  59. void IMPART()
  60. {
  61. for(i=0;i<=L;i++)
  62. while(N[i]%3){N[i]+=10;N[i+1]--;}
  63. while(!N[L-1])L--;
  64. for(i=L-1;i>=0;i--)N[i]/=3;
  65. }
  66. long REST()
  67. {
  68. long s=0;
  69. for(i=0;i<L;i++)s+=N[i];
  70. return s%3;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement