Pagini recente » Cod sursa (job #816146) | Cod sursa (job #1716969) | Cod sursa (job #3148154) | Cod sursa (job #2104053) | Cod sursa (job #18405)
Cod sursa(job #18405)
#include <fstream.h>
#include <iostream.h>
long int n,m;
long int v[300001];
struct adat
{
long int buline;
short int tricouri;
long int v[6];
adat* kov;
};
adat *elso;
void betesz(long int buline,short int tricouri,long int nrt)
{
adat *p = new adat;
p -> buline = buline;
p -> tricouri = tricouri;
p -> v[tricouri] = nrt;
if (elso == NULL)
{
elso = p;
elso->kov = NULL;
}
else if(p->buline <= elso->buline)
{
if (p->buline < elso->buline)
{
p->kov = elso;
elso = p;
}
else
{
if (p->tricouri < elso->tricouri)
{
elso->tricouri=p->tricouri;
}
}
}
else
{
adat *a;
a = elso;
while ((a->kov != NULL) && (a->kov->buline < p->buline))
{
a=a->kov;
}
if (a->kov == NULL)
{
a->kov=p;
p->kov=NULL;
}
else if (a->kov->buline > p->buline)
{
p->kov = a->kov;
a->kov = p;
}
else
{
if (a->kov->tricouri > p->tricouri)
{
a->kov->tricouri = p->tricouri;
}
}
}
}
void torol()
{
adat *p = elso;
while (p != NULL)
{
p=elso->kov;
delete elso;
elso = p;
}
}
long int keres(int k,int p)
{
long int i,j,max;
bool control;
for (i=1;i<=n;i++)
{
betesz(v[i],1,i);
}
adat *a = elso;
while (a != NULL)
{
if (a -> tricouri < k)
{
for (i=1;i<=n;i++)
{
control=true;
for(j=1;j<=a->tricouri;j++)
{
if(a->v[j]==i) control=false;
}
if(control) betesz(a->buline+v[i],a->tricouri+1,i);
}
}
a = a -> kov;
}
a = elso;
max = -1;
while (a != NULL)
{
if ((a->buline % p == 0) && (a->tricouri == k))
max = a->buline;
a = a->kov;
}
a=elso;
while (a!=NULL)
{
cout << a->buline << " ";
a = a -> kov;
}
cout << endl;
torol();
return max;
}
int main()
{
long int i;
short int k,p;
ifstream in;
ofstream out;
in.open("tricouri.in");
out.open("tricouri.out");
in >> n >> m;
for (i=1;i<=n;i++)
{
in >> v[i];
}
for (i=1;i<=m;i++)
{
in >> k >> p;
out << keres(k,p) << endl;
}
in.close();
out.close();
}