📄 2569535_re.cpp
字号:
# include <stdio.h>
# include <algorithm>
# define MAX 10001
using namespace std;
typedef int stack;
struct node
{
char out[20];
double x, y;
}Q[MAX];
int n, L, low;
double lowx, lowy;
stack p, s[MAX];
bool cmp(struct node a,struct node b)
{
if(a.x-lowx==0&&a.y-lowy==0)
return 1;
if(b.x-lowx==0&&b.y-lowy==0)
return 0;
if((a.x-lowx)*(b.y-lowy)-(b.x-lowx)*(a.y-lowy)==0)
return (a.x-lowx)*(a.x-lowx)+(a.y-lowy)*(a.y-lowy)-(b.x-lowx)*(b.x-lowx)+(b.y-lowy)*(b.y-lowy)<0;
return (a.x-lowx)*(b.y-lowy)-(b.x-lowx)*(a.y-lowy) > 0;
}
void GRAHAM_SCAN()
{
int i;
s[0] = 0;
i = 1;while(i<n-1&&(Q[i].x-lowx)*(Q[i+1].y-lowy)-(Q[i+1].x-lowx)*(Q[i].y-lowy)==0)
i++;
s[1] = i++;s[2] = i++;
p = 2;
while(i < n)
{
while((Q[s[p-1]].x-Q[s[p]].x)*(Q[i].y-Q[s[p]].y)-(Q[i].x-Q[s[p]].x)*(Q[s[p-1]].y-Q[s[p]].y)>=0)
p--;
s[++p] = i;
i++;
}
}
void input()
{
int i, j;
char tmp[20];
low = i = 0;
while(scanf("%s",tmp)==1)
{
Q[i].x = atof(&tmp[1]);
for(j = 0; ; j++)
if(tmp[j]==',')
break;
Q[i].y = atof(&tmp[j+1]);
strcpy(Q[i].out,tmp);
if(i)
{
if(Q[i].y < Q[low].y||(Q[i].y == Q[low].y&&Q[i].x<Q[low].x))
low = i;
}
i++;
}
n = i;
lowx = Q[low].x; lowy = Q[low].y;
sort(Q,Q+n,cmp);
GRAHAM_SCAN();
for(i = 0; i <= p; i++)
printf("%s ",Q[s[i]].out);
printf("%s\n",Q[s[0]].out);
}
int main()
{
input();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -