Bogdan are S lei şi vrea să îi investească în acţiuni la SIF Moldova. Acum este foarte simplu, pentru că Bursa Română are un site pe care poţi vinde sau cumpăra acţiuni. Mai mult decât atât, pe site sunt afişate şi previziunile experţilor pentru următoarele n zile. Mai exact, pentru fiecare zi i, se cunoaşte preţul de cumpărare ci (preţul cu care ar putea să cumpere Bogdan o acţiune în ziua i), precum şi preţul de vânzare vi (suma pe care Bogdan ar putea să o obţină vânzând o acţiune în ziua i).
Fiindcă este începător, Bogdan intenţionează să facă cel mult două tranzacţii în decursul acestor n zile: într-o zi să cumpere acţiuni, iar în altă zi să vândă toate acţiunile cumpărate.
Cerinţă
Determinaţi suma maximă pe care o poate avea Bogdan, efectuând eficient cele două tranzacţii.
Date de intrare
Fişierul de intrare bursa.in conţine pe prima linie numere naturale n şi S, cu semnificaţia din enunţ. Pe a doua linie se află n numere naturale c1 c2 ... cn (sumele cu care poate fi cumpărată o acţiune în fiecare dintre cele n zile). Pe a treia linie se află n numere naturale v1 v2 ... vn (sumele cu care poate fi vândută o acţiune în fiecare dintre cele n zile). Numerele aflate pe aceeaşi linie sunt separate prin spaţii.
Date de ieşire
Fişierul de ieşire bursa.out va conţine pe prima linie numărul natural SMAX, reprezentând suma maximă pe care o are Bogdan după n zile. Pe cea de a doua linie vor fi scrise două numere naturale D1 şi D2 separate prin spaţiu, cu semnificaţia că în ziua D1 Bogdan cumpără acţiuni, iar în ziua D2 le vinde (1 ≤ D1 < D2 ≤ n). Dacă Bogdan nu cumpără/vinde acţiuni pe cea de a doua linie se vor afişa valorile -1 -1
Restricţii
• 1 ≤ n ≤ 500
• 1 ≤ S ≤ 1 000 000
• 1 ≤ vi , ci ≤ 1000, pentru 1 ≤ i ≤ n
• Dacă există mai multe soluţii, afişaţi soluţia cu D1 minim. Dacă există mai multe soluţii cu D1 minim, afişaţi soluţia cu D2 minim.
Exemple
bursa.in:
5 1000
2 3 1 4 3
1 2 1 2 3
bursa.out:
3000
3 5
Explicatie:
Bogdan are 1000 lei. In cea de a treia zi cumpără 1000 de acţiuni cu preţul de 1 leu. În cea de a cincea zi vinde cele 1000 de acţiuni cu 3 lei bucata, obţinând suma maximă de 3000 lei.
bursa.in:
3 1000
4 3 2
3 2 1
bursa.out:
1000
-1 -1
Explicatie:
Bogdan are 1000 lei. El nu cumpără/vinde acţiuni. Rămâne cu 1000 lei.
Răspunsuri la întrebare
Răspuns de
0
#include <fstream>
#define nmax 505
#define INF 2000000000
using namespace std;
int v[nmax],c[nmax],n,i,j,k,p,q,s,k1,maxx=-INF;
int main()
{
ifstream f("bursa.in");
ofstream g("bursa.out");
f>>n>>s;
for(i=1;i<=n;i++) f>>c[i];
for(i=1;i<=n;i++) f>>v[i];
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
k=s/c[i];
k1=s-k*c[i]+k*v[j];
if(k1>maxx)
{
maxx=k1;
p=i;
q=j;
}
}
if(maxx>=s) g<<maxx<<"\n"<<p<<" "<<q;
if(maxx<s) g<<s<<"\n"<<-1<<" "<<-1;
f.close();
g.close();
return 0;
}
#define nmax 505
#define INF 2000000000
using namespace std;
int v[nmax],c[nmax],n,i,j,k,p,q,s,k1,maxx=-INF;
int main()
{
ifstream f("bursa.in");
ofstream g("bursa.out");
f>>n>>s;
for(i=1;i<=n;i++) f>>c[i];
for(i=1;i<=n;i++) f>>v[i];
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
k=s/c[i];
k1=s-k*c[i]+k*v[j];
if(k1>maxx)
{
maxx=k1;
p=i;
q=j;
}
}
if(maxx>=s) g<<maxx<<"\n"<<p<<" "<<q;
if(maxx<s) g<<s<<"\n"<<-1<<" "<<-1;
f.close();
g.close();
return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Franceza,
9 ani în urmă
Limba română,
9 ani în urmă
Biologie,
9 ani în urmă