1195: 捧杯

来源:互联网 发布:linux daemonize 编辑:程序博客网 时间:2024/06/08 17:28

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;}