Pagini recente » Cod sursa (job #2723952) | Cod sursa (job #2325782) | Cod sursa (job #2926938) | Cod sursa (job #69090) | Cod sursa (job #3226285)
#include <bits/stdc++.h>
#define MAX 1005
#define err 1e-12
#define pi 3.1415926536
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
pair<int,int>pct[MAX];
struct str
{
int x1,y1,x2,y2;
}lin[MAX*MAX];
double unghi(str a)
{
if(a.x1==a.x2)
return 90;
double yy=a.y2-a.y1;
double xx=a.x2-a.x1;
return atan(yy/xx)/pi*180;
}
bool crt(str a,str b)
{
return unghi(a)<unghi(b);
}
bool crt2(pair<int,int>a,pair<int,int>b)
{
return a.second<b.second;
}
int main()
{
int n;
fin>>n;
int i;
for(i=1;i<=n;++i)
fin>>pct[i].first>>pct[i].second;
int j;
int ind=0;
sort(pct+1,pct+n+1,crt2);
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
lin[++ind]={pct[i].first,pct[i].second,pct[j].first,pct[j].second};
sort(lin+1,lin+ind+1,crt);
///for(i=1;i<=ind;++i)
/// cout<<unghi(lin[i])<<' '<<lin[i].x1<<' '<<lin[i].y1<<' '<<lin[i].x2<<' '<<lin[i].y2<<'\n';
long long tot=0;
for(i=1;i<=ind;++i)
{
j=i;
while(j<ind && fabs(atan2(lin[j].y1-lin[j].y2,lin[j].x1-lin[j].x2)-atan2(lin[j+1].y1-lin[j+1].y2,lin[j+1].x1-lin[j+1].x2))<err)
++j;
tot+=1LL*(j-i+1)*(j-i)/2;
i=j;
}
fout<<tot;
return 0;
}