FJNU第二十届低年级程序设计竞赛(正式赛)-Problem B- 捧杯

    xiaoxiao2021-12-14  18

    问题 B: 捧杯

    时间限制: 1 Sec  内存限制: 128 MB

    题目描述

    112就是FJNUACM分配的实验室,众所周知的是,里面有很多dalao,比如flag, 比如nightlemon。终于有一次,flag凭借着自己的实力夺冠拿到了奖杯。于是 他把奖杯带到了实验室。引起了一场腥风血雨。 由于除了几个dalao以外其他人都很弱,但是大家又都想捧一下杯,并且都想要 自己先捧杯,于是为了先后顺序争论不休。flag最后提出了一个办法就是大家 一起捧杯,于是众鶸给了大佬面子,打算一起捧杯。 但是大家都想离奖杯近一点,于是都把奖杯朝自己的方向拉,而距离奖杯越远的人 用的力气也越大。 现在假设每个人用的力气等于他距离奖杯的距离,那么告诉你每个人的坐标和 奖杯的坐标,问最后奖杯的受力方向。

    输入

    第一行给出一个T(T<=100)代表输入数据的组数 接下来对于每一组输入 第一行给出两个整数x0,y0(|x0|,|y0|<=100)代表奖杯所在的位置。 第二行给出一个n(1<=n<=100)代表想捧杯的人数。 接下来n行每一行给出两个整数xi,yi(|xi|,|yi|<=100),代表每个人的坐标

    输出

    对于每一组测试数据输出一行,包含一个向量(ai,bi)代表最后奖杯所受的合力方向 其中要求|ai|,|bi|为尽可能小的整数。ai,bi之间用一个空格隔开,不能有行末空格

    样例输入

    3

    0 0

    1

    0 1

    0 0

    2

    0 2

    2 0

    0 1

    2

    0 1

    0 2

    样例输出

    0 1

    1 1

    0 1

    思路:常规模拟,将所有向量首尾连接,再求出相对原点的移动方向。

    注意:要以最简形式表示,0 x 要写成(0,1) 或者(0,-1)。

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <iostream> // C++头文件,C++完全兼容C #include <algorithm> // C++头文件,C++完全兼容C #define fre freopen("in.txt","r",stdin) //以文件代替控制台输入,比赛时很常用,能缩短输入测试样例的时间 #define INF 0x3f3f3f3f #define inf 1e60 using namespace std; // C++头文件,C++完全兼容C #define N 100005 // 宏定义 #define LL long long //宏定义 int __gcd(int x,int y) { return y==0?x:__gcd(y,x%y); } int main() { /*cout<<__gcd(-1,-2)<<endl;//-1 cout<<__gcd(1,-1)<<endl; //-1 cout<<__gcd(1,1)<<endl; // 1 cout<<__gcd(3,-2)<<endl; // 1 cout<<__gcd(4,-13)<<endl; //-1*/ //fre; int t; scanf("%d",&t); while(t--){ int a,b; scanf("%d%d",&a,&b); int n; scanf("%d",&n); int xx=0,yy=0; for(int i=0; i<n; i++){ int x,y; scanf("%d%d",&x,&y); xx+=x; yy+=y; } xx-=n*a; yy-=n*b; //分类讨论 if(xx==0&&yy==0){ //xx , yy都为0 printf("0 0\n"); }else if(xx==0){ //xx 为0 printf("0 %d\n",yy/abs(yy)); }else if(yy==0){ //yy 为0 printf("%d 0\n",xx/abs(xx)); }else{ int gcd=__gcd(abs(xx),abs(yy)); //xx , yy不为0。 注意要取 绝对值再进行求最大公因数 printf("%d %d\n",xx/gcd,yy/gcd); } } }

    转载请注明原文地址: https://ju.6miu.com/read-970458.html

    最新回复(0)