Pagini recente » Cod sursa (job #3282719) | Cod sursa (job #170012) | Cod sursa (job #1139573) | Cod sursa (job #2048873) | Cod sursa (job #2147600)
#include<cstdio>
#include<unordered_map>
#include<cmath>
#include<algorithm>
#include<functional>
#define mod 666013
#define pi 3.1415926535897932384626433832795
#define eps 1e-14
hash<double>mhash;
using namespace std;
struct hashr{
int operator () (const double &x) const{
if (x<10000000.0){
int rez=x;
return rez%mod;}
return mhash(x);}
};
struct equali{
bool operator () (const double &x,const double &y) const{
if (abs(x-y)<eps)
return 1;
return 0;}
};
unordered_map<double,int,hashr,equali>m;
pair<int,int>v[1005];
double panta[1000005];
struct point{
int x,y;
}v2[1005];
int main(){
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
int n,i,j,u=0,vertical=0;
long long rasp=0;
scanf("%d",&n);
if (n==1000){
for(i=1;i<=n;i++)
scanf("%d%d",&v[i].first,&v[i].second);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++){
if (v[i].second==v[j].second){
m[(double)2000000000]++;
continue;}
m[(double)(v[i].first-v[j].first)/(double)(v[i].second-v[j].second)]++;}
for(auto& it:m)
rasp=rasp+1LL*it.second*(it.second-1)/2;
printf("%lld\n",rasp);}
if (n<1000){
for(i=1;i<=n;i++)
scanf("%d%d",&v2[i].x,&v2[i].y);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++){
if (v2[i].y==v2[j].y){
vertical++;
continue;}
panta[++u]=(double)((double)(v2[i].x-v2[j].x))/((double)(v2[i].y-v2[j].y));}
rasp=rasp+1LL*vertical*(vertical-1)/2;
sort(panta+1,panta+u+1);
for(i=1;i<=u;){
double x=panta[i];
int cnt=0;
while(fabs(x-panta[i])<=eps && i<=u)
cnt++,i++;
rasp=rasp+1LL*cnt*(cnt-1)/2;}
printf("%lld\n",rasp);}
return 0;}