Pagini recente »
Clasament 2018_03_24_a_7_a
|
Istoria paginii runda/recursivitate_a-7-a_1
|
Istoria paginii runda/2024-02-02-clasa-5-tema-24
|
Monitorul de evaluare
|
Cod sursă (job #816442)
Cod sursă (job
#816442)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("infasuratoare.in");
ofstream out ("infasuratoare.out");
#define MAX 100005
int stiva[MAX];
struct pct {
int x,y;
} v[MAX];
bool cmp (pct a, pct b){///sortam dupa tg
//return ((a.y+1000000001)*1.0)/((a.x+1000000001)*1.0)>((b.y+1000000001)*1.0)/((b.x+1000000001)*1.0);
if (a.x>b.x){
return a.x>b.x;
}
return a.y>b.y;
}
int main()
{
int n;
in >> n;
for (int i=1; i<=n; i++) {
in >> v[i].x >> v[i].y;
}
sort (v+1,v+1+n, cmp);
for (int i=1; i<=n; i++){
cout << v[i].x << " " << v[i].y << endl;
}
stiva[1]=1;
stiva[2]=2;
int cnt=2;
bool sens=-1;
for (int i=3; i<=n; i++){
if (v[stiva[cnt-1]].x*v[stiva[cnt]].y+v[i].x*v[stiva[cnt-1]].y+v[stiva[cnt]].x*v[i].y-v[i].x*v[stiva[cnt]].y-v[stiva[cnt-1]].x*v[i].y-v[stiva[cnt]].x*v[stiva[cnt-1]].y>0){
if (sens==1){
stiva[++cnt]=i;
} else {
stiva[cnt]=i;
sens=1;
}
} else if (v[stiva[cnt-1]].x*v[stiva[cnt]].y+v[i].x*v[stiva[cnt-1]].y+v[stiva[cnt]].x*v[i].y-v[i].x*v[stiva[cnt]].y-v[stiva[cnt-1]].x*v[i].y-v[stiva[cnt]].x*v[stiva[cnt-1]].y<0){
if (sens==0){
stiva[++cnt]=i;
} else {
stiva[cnt]=i;
sens=1;
}
} else {
if (sqrt(v[stiva[cnt]].x*v[stiva[cnt]].x+v[stiva[cnt]].y*v[stiva[cnt]].y)<sqrt(v[i].x*v[i].x+v[i].y*v[i].y)){
stiva[cnt]=i;
}
}
}
out << cnt << '\n';
for (int i=1; i<=cnt; i++){
out << v[stiva[i]].x << " " << v[stiva[i]].y << '\n';
}
return 0;
}