tanasaradu

Untitled

Nov 29th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream fin("fibosir.in");
  4. ofstream fout("fibosir.out");
  5. const int nmax=500000;
  6. short a[nmax],b[nmax],c[nmax],sir[nmax];
  7. int n,k,m,na,nb,nsir,nc;
  8. inline void Sum()
  9. {
  10. nc=max(na,nb);
  11. if(na<nb)
  12. for(int i=na+1; i<=nb; i++)
  13. a[i]=0;
  14. else for(int i=nb+1; i<=na; i++)
  15. b[i]=0;
  16. int t,cifra;
  17. t=0;
  18. for(int i=1; i<=nc; i++)
  19. {
  20. cifra=a[i]+b[i]+t;
  21. c[i]=cifra%10;
  22. t=cifra/10;
  23. }
  24. if(t)
  25. c[++nc]=t;
  26. }
  27. inline void Copy()
  28. {
  29. na=0;
  30. for(int i=1; i<=nb; i++)
  31. a[++na]=b[i];
  32. nb=0;
  33. for(int i=1; i<=nc; i++)
  34. b[++nb]=c[i];
  35. for(int i=nc; i>=1; i--)
  36. sir[++nsir]=c[i];
  37. }
  38. inline void Build()
  39. {
  40. na=nb=1;
  41. nsir=2;
  42. a[na]=b[nb]=1;
  43. sir[1]=sir[2]=1;
  44. for(int i=3; i<=n; i++)
  45. {
  46. Sum();
  47. Copy();
  48. }
  49. }
  50. inline void Solve()
  51. {
  52. int i=1;
  53. while(i<=nsir)
  54. {
  55. int mx=0,poz;
  56. bool ok=false;
  57. for(int j=1; j<=m && !ok; j++)
  58. {
  59. if(sir[i+j*k]>mx)
  60. {
  61. mx=sir[i+j*k];
  62. poz=j;///nr de subsecvente de lungime k eliminate
  63. if(mx==9)
  64. ok=true;///nu mai are rost sa merg mai departe
  65. }
  66. }
  67. if(sir[i]<mx)
  68. {
  69. i+=(poz*k);///->ma duc durect la pozitia unde am gasit maximul
  70. m-=poz;///elmine subsecvente de lungime k(in numar de poz)
  71. }
  72. else fout<<sir[i++];///afisez
  73. }
  74. /*for(int j=1;j<=top;j++)
  75. cout<<st[j]<<" ";
  76. cout<<"\n";
  77. */
  78. }
  79. int main()
  80. {
  81. fin>>n>>m>>k;
  82. Build();
  83. Solve();
  84. fin.close();
  85. fout.close();
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment