Description
112就是FJNUACM分配的实验室,众所周知的是,里面有很多dalao,比如flag,比如nightlemon。终于有一次,flag凭借着自己的实力夺冠拿到了奖杯。于是他把奖杯带到了实验室。引起了一场腥风血雨。由于除了几个dalao以外其他人都很弱,但是大家又都想捧一下杯,并且都想要自己先捧杯,于是为了先后顺序争论不休。flag最后提出了一个办法就是大家一起捧杯,于是众鶸给了大佬面子,打算一起捧杯。但是大家都想离奖杯近一点,于是都把奖杯朝自己的方向拉,而距离奖杯越远的人用的力气也越大。现在假设每个人用的力气等于他距离奖杯的距离,那么告诉你每个人的坐标和奖杯的坐标,问最后奖杯的受力方向。
Input
第一行给出一个T(T<=100)代表输入数据的组数
接下来对于每一组输入
第一行给出两个整数x0,y0(|x0|,|y0|<=100)代表奖杯所在的位置。
第二行给出一个n(1<=n<=100)代表想捧杯的人数。
接下来n行每一行给出两个整数xi,yi(|xi|,|yi|<=100),代表每个人的坐标
Output
对于每一组测试数据输出一行,包含一个向量(ai,bi)代表最后奖杯所受的合力方向
其中要求|ai|,|bi|为尽可能小的整数。ai,bi之间用一个空格隔开,不能有行末空格
Sample Input
3
0 0
1
0 1
0 0
2
0 2
2 0
0 1
2
0 1
0 2
Sample Output
0 1
1 1
0 1
#include<stdio.h>
#include<math.h>
int main()
{
int t, i, j, x1, y1, x, y, n;
int a , b, g;
int x0, y0;
scanf("%d",&t);
for(i = 0; i < t; i++)
{
g = 0;
scanf("%d%d",&x0,&y0); // 设置坐标原点
scanf("%d",&n);
x1 = 0;
y1 = 0;
for(j = 0; j < n; j++)
{
scanf("%d%d",&x,&y);
x1 += (x-x0);
y1 += (y-y0); //对坐标进行加减
}
a = abs(x1);
b = abs(y1);
for (j = 1; j <= a && j <= b; j++ )
if(a != 0 && b != 0)
if(a % j == 0 && b % j == 0 )
g = j; //算两坐标的 最大约数
if(g) // 判断有无约数
printf("%d %d\n",x1/g,y1/g); // 列出所有其他情况才是最难的部分
else if(x1 == 0 && y1 != 0 )
printf("%d %d\n",0,y1>0?1:-1);
else if(y1 == 0 && x1 != 0)
printf("%d %d\n",x1>0?1:-1,0);
else if( x1 != 0 && y1 != 0 )
printf("%d %d\n",x1,y1);
else if(x1 == 0 && y1 == 0)
printf("0 0\n");
}
return 0;
}