Pagini recente » Cod sursa (job #2342972) | Cod sursa (job #893447) | Cod sursa (job #2877621) | Cod sursa (job #3128162) | Cod sursa (job #2492473)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
bool cmp( pair<long long, long long> a, pair<long long, long long> b)
{
return a.first < b.first;
}
long long get_dist(pair<long long, long long> a, pair<long long, long long> b)
{
return (a.first - b.first)*(a.first - b.first) + (a.second - b.second)*(a.second - b.second);
}
int distanta(int n, vector<pair<long long, long long>> x)
{
int i,j;
if(n<=3)
{
long long dist = -1;
for( i=0; i<n-2; i++)
for(j=i+1; j<=n-1; j++)
{
int d_puncte = get_dist(x[i], x[j]);
if( d_puncte > dist)
dist = d_puncte;
}
return dist;
}
else
{
int middle = n/2;
vector<pair<long long, long long>> xs;
vector<pair<long long, long long>> xd;
vector<pair<long long, long long>> band;
for(i=0; i<=middle; i++)
xs.push_back(make_pair(x[i].first, x[i].second));
for(i=middle; i<n; i++)
xd.push_back(make_pair(x[i].first, x[i].second));
long long ds, dd, d;
ds = distanta(xs.size(), xs);
dd = distanta(xd.size(), xd);
if(ds<dd)
d=ds;
else
d=dd;
for(i=0; i<n; i++)
if(x[i].first>=(x[middle].first-d) && x[i].first<=(x[middle].first + d))
band.push_back(make_pair(x[i].first,x[i].second));
sort(band.begin(), band.end(), cmp);
for(i=0; i<(int)band.size(); i++)
for( j=i+1; j<=i+7; j++)
{
int dist = get_dist(band[i], band[j]);
if(dist<d)
d=dist;
}
return d;
}
}
int main()
{
int n, i;
long long a, b, dmax;
ifstream inFile;
inFile.open("cmap.in");
if (!inFile)
{
cout << "Unable to open file";
exit(1); // terminate with error
}
inFile >> n;
vector<pair<long long, long long>> x;
for (i = 0; i < n; i++)
{
inFile >> a >> b;
x.push_back(make_pair(a, b));
}
inFile.close();
sort(x.begin(), x.end());
dmax = distanta(n, x);
ofstream outFile;
outFile.open("cmap.out");
if (!outFile)
{
cout << "Unable to open file";
exit(1); // terminate with error
}
outFile<<dmax;
outFile.close();
return 0;
}