⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2569549_wa.cpp

📁 北大大牛代码 1240道题的原代码 超级权威
💻 CPP
字号:
# include <stdio.h>
# include <algorithm>
# define MAX 100001
using namespace std;

typedef int stack;
struct node
{
	char out[100];
	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[100];
	
	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 + -