Răspuns :
Prima problema:
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ofstream fout("prob.out");
ifstream fin("prob.in");
const int NMAX = 10000;
int n, x, nr, Max, poz_init;
int lg[NMAX], poz[NMAX];
vector<int> v;
void lis()
{
for(int i=n-1; i>=0; i--) {
for(int j=i+1; j<n; j++)
if(v[i] < v[j] && lg[i] <= lg[j])
lg[i] = lg[j] + 1, poz[i] = j;
if(Max < lg[i]) Max = lg[i], poz_init = i;
}
nr++;
}
void sterge()
{
int k = 0;
for(int i=poz_init; i != -1; i = poz[i]) {
v.erase(v.begin() + i + k);
k--;
}
n += k;
}
int main()
{
fin >> n;
for(int i=0; i<n; i++) fin >> x, v.push_back(x);
while(!v.empty()) {
fill(lg, lg + n, 1), fill(poz, poz + n, -1);
Max = poz_init = 0;
lis();
sterge();
}
fout << nr << '\n';
return 0;
}
A doua problema: (data viitoare cand pui mai multe probleme la un loc, ofera si tu mai multe puncte :)) )
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ofstream fout("date.out");
ifstream fin("date.in");
int n, sol;
vector<float> v;
void citire()
{
int x, y;
fin >> n;
for(int i=1; i<=n; i++) {
float nr;
fin >> x;
fin.get();
fin >> y;
nr = (float)x / y;
v.push_back(nr);
}
sort(v.begin(), v.end());
}
void rezolva()
{
float suma = 0;
while(!v.empty()) {
float aux = v.front();
if(aux + suma >= 1) sol++, suma = 0;
else {
suma += aux;
v.erase(v.begin());
}
}
fout << sol << '\n';
}
int main()
{
citire();
rezolva();
return 0;
}
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ofstream fout("prob.out");
ifstream fin("prob.in");
const int NMAX = 10000;
int n, x, nr, Max, poz_init;
int lg[NMAX], poz[NMAX];
vector<int> v;
void lis()
{
for(int i=n-1; i>=0; i--) {
for(int j=i+1; j<n; j++)
if(v[i] < v[j] && lg[i] <= lg[j])
lg[i] = lg[j] + 1, poz[i] = j;
if(Max < lg[i]) Max = lg[i], poz_init = i;
}
nr++;
}
void sterge()
{
int k = 0;
for(int i=poz_init; i != -1; i = poz[i]) {
v.erase(v.begin() + i + k);
k--;
}
n += k;
}
int main()
{
fin >> n;
for(int i=0; i<n; i++) fin >> x, v.push_back(x);
while(!v.empty()) {
fill(lg, lg + n, 1), fill(poz, poz + n, -1);
Max = poz_init = 0;
lis();
sterge();
}
fout << nr << '\n';
return 0;
}
A doua problema: (data viitoare cand pui mai multe probleme la un loc, ofera si tu mai multe puncte :)) )
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ofstream fout("date.out");
ifstream fin("date.in");
int n, sol;
vector<float> v;
void citire()
{
int x, y;
fin >> n;
for(int i=1; i<=n; i++) {
float nr;
fin >> x;
fin.get();
fin >> y;
nr = (float)x / y;
v.push_back(nr);
}
sort(v.begin(), v.end());
}
void rezolva()
{
float suma = 0;
while(!v.empty()) {
float aux = v.front();
if(aux + suma >= 1) sol++, suma = 0;
else {
suma += aux;
v.erase(v.begin());
}
}
fout << sol << '\n';
}
int main()
{
citire();
rezolva();
return 0;
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de ajutor, nu ezitați să ne contactați. Vă așteptăm cu drag data viitoare și vă încurajăm să ne salvați în lista de favorite!