Pagini recente » Cod sursa (job #206730) | Cod sursa (job #898050) | Cod sursa (job #1317798) | Cod sursa (job #811014) | Cod sursa (job #1910669)
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
FILE* in = fopen("cautbin.in", "r");
FILE* out = fopen("cautbin.out", "w");
int a[800];
void interplasare(int st, int p, int dr){
int c[800], k=0;
int i=st, j=p+1;
while(i<=p&&j<=dr){
if(a[i]<a[j]){
c[k++]=a[i++];
}
else c[k++]=a[j++];
}
while(i<=p){
c[k++]=a[i++];
}
while(j<=dr){
c[k++]=a[j++];
}
k=0;
for(int i=st;i<=dr;i++){
a[i]=c[k++];
}
}
void srt(int st, int dr){
if(st<dr){
int p=st+(dr-st)/2;
srt(st, p);
srt(p+1, dr);
interplasare(st, p, dr);
}
}
int cbin(int x, int y, int st, int dr){
int s=a[x]+a[y];
while(st<=dr){
int p=st+(dr-st)/2;
if(a[p]<=s&&a[p+1]>s){
return p-y;
}
else {
if(a[p]>s){
dr=p-1;
}
else st=p+1;
}
}
return 0;
}
int main()
{
int n, i, j, s=0;
fscanf(in, "%d", &n);
for(i=0;i<n;i++){
fscanf(in, "%d", &a[i]);
}
srt(0, n-1);
for(i=0;i<n-2;i++){
int x=a[i];
for(j=i+1;j<n-1;j++){
int y=a[j];
a[n]=x+y+1;
s+=cbin(i, j, j+1, n-1);
}
}
fprintf(out, "%d", s);
return 0;
}