记录编号 230354 评测结果 AAAAAAAAAAAAAAA
题目名称 [POI 2005] 骑士 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.036 s
提交时间 2016-02-21 14:54:52 内存使用 0.29 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
const int SIZEN=110;
int N;
int vec[SIZEN][2];
void read()
{
	scanf("%d",&N);
	for(int i=1;i<=N;i++)
	{
		scanf("%d%d",&vec[i][0],&vec[i][1]);
		if(vec[i][0]<0) vec[i][0]*=(-1),vec[i][1]*=(-1);
	}
}
int gcd(int a,int b,int &x,int &y)
{
	if(b==0){ x=1,y=0;return a;}
	int re=gcd(b,a%b,y,x);
	y-=a/b*x;
	return re;
}
void work()
{
	int A[2],B[2]={0},C[2];
	A[0]=vec[1][0],A[1]=vec[1][1];
	for(int i=2;i<=N;i++)
	{
		int x,y;
		if(vec[i][0]==0) C[0]=0,C[1]=vec[i][1];
		else
		{
		int g=gcd(A[0],vec[i][0],x,y);
		C[0]=0,C[1]=(A[0]*vec[i][1]-A[1]*vec[i][0])/g;
		A[0]=g;A[1]=A[1]*x+vec[i][1]*y;
		}
		if(C[1]==0) continue;
		else if(B[1]==0) B[1]=C[1];
		else B[1]=gcd(B[1],C[1],x,y);
	}
	printf("%d %d\n",A[0],A[1]);
	printf("%d %d\n",B[0],B[1]);
}
int main()
{
	freopen("knight_poi2005.in","r",stdin);
	freopen("knight_poi2005.out","w",stdout);
	read();
	work();
	return 0;
}