Cod sursa(job #324205)
Utilizator | Data | 14 iunie 2009 21:50:40 | |
---|---|---|---|
Problema | Numarare triunghiuri | Scor | 100 |
Compilator | c | Status | done |
Runda | Arhiva de probleme | Marime | 0.48 kb |
#include<stdio.h>
#include<string.h>
#define W 30001
#define F(x,y,z) for(x=z;x<=y;++x)
#define init(x) memset(x,0,sizeof(x))
long long v[801],o[801],i,j,n,b[W],q[W],p;int main(){FILE *f=fopen("nrtri.in","r"),*g=fopen("nrtri.out","w");init(q);init(b);fscanf(f,"%lld",&n);p=0;F(i,n,1){fscanf(f,"%lld",&v[i]);++b[v[i]];}F(i,W,1){F(j,b[i],1)o[++p]=i;q[i]=p;}p=0;F(i,n-2,1)F(j,n-1,i+1)if(o[i]+o[j]<W)p+=q[o[i]+o[j]]-j;else p+=q[W-1]-j;if(!p) --p;fprintf(g,"%lld",p);fclose(f);fclose(g);return 0;}