using System; using System.IO; using System.Collections; using System.Collections.Generic; class Point // Точка координатної площини { public int x,y; public Point(int x, int y) {this.x = x; this.y = y;} } class Example { static int start; // Номер початкова вершина лініної оболонки static int n_ = 10; // Верхня межа кількості точок static Point[] a = new Point[n_];// Масив координат точок static int rotate(Point a, Point b, Point c) { return (b.x-a.x)*(c.y-b.y)-(b.y-a.y)*(c.x-b.x); } static int ComparePoint(int k, int j) { int r=rotate(a[start],a[j],a[k]); if (r!=0) return r; else { int dk=Math.Abs(a[start].x-a[k].x)+Math.Abs(a[start].y-a[k].y); int dj=Math.Abs(a[start].x-a[j].x)+Math.Abs(a[start].y-a[j].y); return dj-dk; } } static void Main() { int j, k=0, n, n1; try { using (StreamReader file = new StreamReader("graham.in")) { string[] t = file.ReadLine().Split(' '); n = Int32.Parse(t[0]); n1=n-1; t = file.ReadLine().Split(' '); for (j=0; j c = new Comparison (ComparePoint); Array.Sort(p, c); int [] s = new int[n]; // Масив, що гратиме роль стеку s[0]=start; s[1]=p[0]; int ns=2; // Кількість елементів стеку // 3. Перевірка розташування точок на одній прямій bool line=true; for (j=0; j