Pagini recente » Rezultatele filtrării | Cod sursa (job #2118278) | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #181680)
Cod sursa(job #181680)
#include <stdio.h>
typedef struct
{
int val,indice,grupa;
}element;
int n,d,c[100],i,lastgr,ok,j;
element a[100];
FILE *f,*g;
int divide(int ls, int ld)
{
int s,d;
element aux;
s=ls; d=ld;
aux=a[ls];
while(s<d)
{
while((s<d) && (a[d].val>aux.val))d--;
a[s]=a[d];
while((s<d) && (a[s].val<=aux.val))s++;
a[d]=a[s];
}
a[s]=aux;
return s;
}
void quick(int ls, int ld)
{
int k;
if(ls<ld)
{
k=divide(ls,ld);
quick(ls,k-1);
quick(k+1,ld);
}
}
int divide2(int ls, int ld)
{
int s,d;
element aux;
s=ls; d=ld;
aux=a[ls];
while(s<d)
{
while((s<d) && (a[d].indice>aux.indice))d--;
a[s]=a[d];
while((s<d) && (a[s].indice<=aux.indice))s++;
a[d]=a[s];
}
a[s]=aux;
return s;
}
void quick2(int ls, int ld)
{
int k;
if(ls<ld)
{
k=divide2(ls,ld);
quick2(ls,k-1);
quick2(k+1,ld);
}
}
int main()
{
f=fopen("partitie.in","r");
g=fopen("partitie.out","w");
fscanf(f,"%d %d\n",&n,&d);
for(i=1;i<=n;i++)
{
fscanf(f,"%d\n",&a[i].val);
a[i].indice=i;
}
quick(1,n);
a[1].grupa=1;
lastgr=1;
for(i=2;i<=n;i++)
{
ok=0;
for(j=i-1;(j>=1)&&(!ok);j--)
if((a[i].val-a[j].val)>=d)
{
ok=1;
a[i].grupa=a[j].grupa;
}
if(ok==0)
a[i].grupa=++lastgr;
}
quick2(1,n);
//afisare
fprintf(g,"%d\n",lastgr);
for(i=1;i<=n;i++)
fprintf(g,"%d\n",a[i].grupa);
fclose(f); fclose(g);
return 0;
}