Witam
Mam problem z zadaniem podanym w załączniku.
Rozwiązanie powinno być złożoności liniowej O(n).
Oto mój kod dla rozwiązania O(n^2)
#include<iostream>
#include<fstream>
////////////////////////////Zlozonosc n(n-1) = O(n^2)
using namespace std;
int main()
{
fstream file,file2;
file.open("In0102.txt",ios::in); if(!file.good()) {cout<<"Error"; return 1;}
file2.open("Out0102.txt",ios::out);
int n,k;
file>>n>>k;
int *table = new int[n];
bool *table2 = new bool[n];
for(int i=0; i<n; ++i) table2[i] = 0;
//wczytanie n liczb z pliku
for(int i=0; i<n; ++i)
{
file>>table[i];
}
int min_set = 0; file2<<"0"<<endl;
for(int i=0; i<n; ++i )
{
if(table2[i]==1) continue;
int sum = -1;
int v = -1;
for(int j=i+1; j<n; ++j)
{
if(table2[j]==1) continue;
if((sum < (table[i]+table[j])) && ((table[i]+table[j]) <= k))
{
sum = table[i]+table[j];
v = j;
}
}
if(v!=-1)
{
table2[i] = 1;
table2[v] = 1;
file2<<table[i]<<" "<<table[v]<<endl;
}
else
{
table2[i] = 1;
file2<<table[i]<<endl;
}
++min_set;
}
file2.seekp(0);
file2<<min_set<<endl;
delete [] table2;
delete [] table;
return 0;
}
Może ktoś podsunie jakiś sprytny sposób na rozwiązanie tego liniowo? Ja już nie mam pomysłów.