Pagini recente » Cod sursa (job #1821166) | Cod sursa (job #684025) | Cod sursa (job #11940) | Cod sursa (job #1684319) | Cod sursa (job #578864)
Cod sursa(job #578864)
#include <stdio.h>
struct sir1
{int val,poz;} sir[9000];
int n,s1[181],s1L;
long rez;
void schSir(sir1 &a,sir1 &b) {sir1 aux=a;a=b;b=aux;}
void qsortSir(int li,int ls)
{
if(li>=ls) return;
int i=li,j;
for(j=li+1;j<=ls;j++)
if(sir[j].val<sir[li].val)
schSir(sir[++i],sir[j]);
schSir(sir[i],sir[li]);
qsortSir(li,i-1);
qsortSir(i+1,ls);
}
void cit(FILE *f)
{
int i;
fscanf(f,"%i",&n);
for(i=0;i<n;i++)
{
fscanf(f,"%i",&sir[i].val);
sir[i].poz=i;
}
}
void map()
{
int a;
for(s1L=1;(a=s1L*50)<n;s1L++)
s1[s1L++]=sir[a].val;
s1[s1L]=sir[n-1].val;
}
void caut(int val,int poz1,int poz2)
{
int i,pos;
for(i=0;i<s1L;i++)
if(val>=s1[i] && val<=s1[i+1])
{
pos=i;
i=200;
}
for(i=pos*50;val>sir[i].val;i++);
for(;val==sir[i].val;i++)
if(sir[i].poz>poz1 && sir[i].poz!=poz2)
rez++;
}
void cautMar()
{
int i,j,a;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(sir[i].poz!=sir[j].poz)
{
a=2*sir[i].val-sir[j].val;
if(a<=0)
j=n;
else
caut(a,sir[j].poz,sir[i].poz);
}
}
void scr(FILE *f)
{
fprintf(f,"%li\n",rez);
}
int main()
{
cit(fopen("medie.in","r"));
qsortSir(0,n-1);
map();
cautMar();
scr(fopen("medie.out","w"));
return 0;
}