Advertisement
a53

Primest Prime Pancakes

a53
Jan 22nd, 2021
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <bitset>
  3. #define N 1000000
  4. using namespace std;
  5. int x,p,d[8];
  6. bitset<N>prim;
  7.  
  8. long long int Profit(int cod) /// Calculeaza profitul pentru un cod
  9. {
  10. int cifra;
  11. long long int pret=x;
  12. if(prim[cod])
  13. pret+=cod+p;
  14. int c_cod=cod,sc=0,pd=1;
  15. while(c_cod)
  16. {
  17. cifra=c_cod%10;
  18. pd*=cifra;
  19. sc+=cifra;
  20. if(prim[cifra])
  21. pret+=d[cifra];
  22. c_cod/=10;
  23. }
  24. if(prim[sc])
  25. pret+=sc;
  26. if(prim[pd])
  27. pret+=pd;
  28. return pret;
  29. }
  30.  
  31. void ciur()
  32. {
  33. prim.set();
  34. int mult;
  35. for(int i=2;i<N;++i)
  36. {
  37. if(prim[i])
  38. {
  39. mult=i*2;
  40. while(mult<N)
  41. prim[mult]=false,mult+=i;
  42. }
  43. }
  44. }
  45.  
  46.  
  47. int main()
  48. {
  49. ios::sync_with_stdio(false);
  50. ciur();
  51. int n;
  52. cin>>n;
  53. int CodC[n+1];
  54. for(int i=1;i<=n;++i)
  55. cin>>CodC[i];
  56. cin>>x>>p>>d[2]>>d[3]>>d[5]>>d[7];
  57. long long int profit=0,ProfitMax;
  58. for(int i=1;i<=n;++i)
  59. {
  60. int cod,c_cod;
  61. cod=c_cod=CodC[i];
  62. ProfitMax=Profit(cod);
  63. int putere=1;
  64. while(c_cod)
  65. {
  66. int cifra=c_cod%10;
  67. for(int j=0;j<=9;++j)
  68. {
  69. bool ok=true;
  70. if(c_cod<10&&j==0) /// Daca e prima cifra, atunci nu pot sa o schimb cu 0
  71. ok=false;
  72. if(ok&&j!=cifra)
  73. {
  74. int n_cod=cod-cifra*putere+j*putere; /// Noul cod prin schimbarea cifrei
  75. long long int profitc=Profit(n_cod);
  76. if(profitc>ProfitMax)
  77. ProfitMax=profitc;
  78. }
  79. }
  80. c_cod/=10;
  81. putere*=10;
  82. }
  83. profit+=ProfitMax;;
  84. }
  85. cout<<profit;
  86. return 0;
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement