Cod sursa(job #1150899)
| Utilizator | Data | 23 martie 2014 17:53:11 | |
|---|---|---|---|
| Problema | Numarare triunghiuri | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.19 kb |
#include<fstream>
#include<algorithm>
using namespace std;
int x[803], i, j, n, p, p1, u, u1, ok, mij, sol, s, d;
int mod(int x){
return (x>0?x:-x);
}
ifstream in("nrtri.in");
ofstream out("nrtri.out");
int main(){
in>>n;
for(i=1; i<=n; i++)
in>>x[i];
sort(x+1, x+n+1);
for(i=1; i<n; i++){
for(j=i+1; j<=n; j++){
ok=0;
s=x[i]+x[j];
d=mod(x[i]-x[j]);
p=i; u=n;
while(p<=u){
mij=p+(u-p)/2;
if(x[mij]<s)
p=mij+1;
else
u=mij-1;
}
u1=u;
if(x[u1]>d)
ok=1;
p=i; u=n;
while(p<=u){
mij=p+(u-p)/2;
if(x[mij]<s && x[mij]>d)
u=mij-1;
else
p=mij+1;
}
p1=p;
if(u1-p1+1>0 && ok!=0 && p1<u1){
sol+=u1-p1+1;
if(i>=p1 && i<=u1)
sol--;
if(j>=p1 && j<=u1)
sol--;
}
}
}
out<<sol;
return 0;
}
