Pagini recente »
Clasament calu_paste_fericit
|
Istoria paginii runda/mongol_9/clasament
|
Istoria paginii runda/11_ian_2014/clasament
|
Cod sursă (job #547340)
|
Cod sursă (job #694036)
Cod sursă (job
#694036)
#include <bits/stdc++.h>
#include <unordered_map>
#include <map>
using namespace std;
ifstream fin("infasuratoare.in");
ofstream fout("infasuratoare.out");
//-----------------------------------------
#define ll long long
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vll vector<long long>
#define mii map<int, int>
#define si set<int>
#define sc set<char>
//-----------------------------------------
#define f(i,s,e) for(int i=s;i<=e;++i)
#define nf(i,s,e) for(i=s;i<e;++i)
#define rf(i,e,s) for(i=e;i>=s;--i)
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define sp <<" "
//------------------------------------------
const int NMAX = 1e5 + 5;
const int KMAX = 1e1 + 5;
const int MOD = 1e5 + 3;
const int INF = 0x3f3f3f3f;
const int PI = 3.141592654;
//------------------------------------------
struct xy {
int x, y;
}v[NMAX];
int n;
vector<xy>infs;
//------------------------------------------
void read() {
fin >> n;
for (int i = 0; i < n; ++i)
fin >> v[i].x >> v[i].y;
}
inline int orientare(const xy& a, const xy& b, const xy& c) {
return (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);
}
bool cmp(const xy& a, const xy& b) {
return orientare(v[0], a, b) < 0;
}
int find() {
int j = 0, i;
for (i = 1; i < n; i++)
if (v[i].y < v[j].y || (v[j].y == v[i].y && v[i].x < v[j].x))
j = i;
return j;
}
void infasuratoare() {
infs.push_back(v[0]);
infs.push_back(v[1]);
for (int i = 2; i < n; i++) {
while (infs.size() >= 2 && orientare(infs[infs.size() - 2], infs.back(), v[i]) >= 0)
infs.pop_back();
infs.push_back(v[i]);
}
}
void solve() {
swap(v[0], v[find()]);
sort(v + 1, v + n, cmp);
infasuratoare();
fout << infs.size()-1 << "\n";
for(int i=0;i<infs.size()-1;++i)
fout << infs[i].x << " " << infs[i].y << "\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
read();
solve();
return 0;
}