Pagini recente » Cod sursa (job #2999843) | Cod sursa (job #1109828) | Cod sursa (job #157951) | Cod sursa (job #1092308) | Cod sursa (job #1454385)
#include <stdio.h>
#include <stdlib.h>
#define FIN "nrtri.in"
#define FOUT "nrtri.out"
#define SUCCES 0
#define ERROR 1
#define NMAX 800
FILE *in, *out;
int bete[NMAX];
int N, solution;
int compare (const void * a, const void * b) {
return ( *(int*)a - *(int*)b );
}
int bin_search(int lower, int higher, int refer){
while(lower < higher-1){
int mid = lower + (higher - lower) / 2;
if(refer == bete[mid]) {
lower = mid;
break;
} else if(refer < bete[mid]){
higher = mid;
} else {
lower = mid;
}
}
return lower;
}
void solve(){
qsort(bete, N, sizeof(int), compare);;
for(int i=0; i < N-2; i++){
for(int j=i+1; j < N-1; j++){
int sum = bete[i] + bete[j];
int index_higher = bin_search(j, N, sum);
while(bete[index_higher+1] == sum) index_higher++;
solution += (index_higher - j);
}
}
}
int main(){
in = fopen(FIN, "rt");
out = fopen(FOUT, "wt");
if(!in || !out) return ERROR;
fscanf(in, "%d", &N);
for(int i=0; i < N; i++){
fscanf(in, "%d", &bete[i]);
}
solve();
fprintf(out, "%d", solution);
fclose(in);
fclose(out);
return SUCCES;
}