Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bitset>
- #define N 1000000
- using namespace std;
- int x,p,d[8];
- bitset<N>prim;
- long long int Profit(int cod) /// Calculeaza profitul pentru un cod
- {
- int cifra;
- long long int pret=x;
- if(prim[cod])
- pret+=cod+p;
- int c_cod=cod,sc=0,pd=1;
- while(c_cod)
- {
- cifra=c_cod%10;
- pd*=cifra;
- sc+=cifra;
- if(prim[cifra])
- pret+=d[cifra];
- c_cod/=10;
- }
- if(prim[sc])
- pret+=sc;
- if(prim[pd])
- pret+=pd;
- return pret;
- }
- void ciur()
- {
- prim.set();
- int mult;
- for(int i=2;i<N;++i)
- {
- if(prim[i])
- {
- mult=i*2;
- while(mult<N)
- prim[mult]=false,mult+=i;
- }
- }
- }
- int main()
- {
- ios::sync_with_stdio(false);
- ciur();
- int n;
- cin>>n;
- int CodC[n+1];
- for(int i=1;i<=n;++i)
- cin>>CodC[i];
- cin>>x>>p>>d[2]>>d[3]>>d[5]>>d[7];
- long long int profit=0,ProfitMax;
- for(int i=1;i<=n;++i)
- {
- int cod,c_cod;
- cod=c_cod=CodC[i];
- ProfitMax=Profit(cod);
- int putere=1;
- while(c_cod)
- {
- int cifra=c_cod%10;
- for(int j=0;j<=9;++j)
- {
- bool ok=true;
- if(c_cod<10&&j==0) /// Daca e prima cifra, atunci nu pot sa o schimb cu 0
- ok=false;
- if(ok&&j!=cifra)
- {
- int n_cod=cod-cifra*putere+j*putere; /// Noul cod prin schimbarea cifrei
- long long int profitc=Profit(n_cod);
- if(profitc>ProfitMax)
- ProfitMax=profitc;
- }
- }
- c_cod/=10;
- putere*=10;
- }
- profit+=ProfitMax;;
- }
- cout<<profit;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement