m0_50934066 2023-08-15 15:56 采纳率: 96.1%
浏览 8
已结题

牧羊犬 描述 小明养了一只牧羊犬,牧羊犬很聪明,能够驱赶羊群,现在把整个草场看作是一个平面直角坐标

牧羊犬
描述

小明养了一只牧羊犬,牧羊犬很聪明,能够驱赶羊群,现在把整个草场看作是一个平面直角坐标系,原点在草场的正中央,现在牧羊犬可以让草场所有的羊朝某个方向平移,或者整个羊群绕着原点随意旋转,现在小明想要知道牧羊犬在经过0次或若干次牧羊后,在x,y轴上最多有多少羊

day08-03.zip

输入
第一行一个整数n(n<=100)表示羊的数量

第二行有n个整数,表示羊的x坐标

第三行有n个整数,表示羊的y坐标(坐标均在-10000,10000之间)

输出
一个整数

输入样例 1

2
1 3
1 3
输出样例 1

2
提示

可能用到的数学工具:

已知直线上两点的坐标(x1,y1)(x2,y2),则直线斜率公式:k=(y2-y1)/(x2-x1)。

斜率性质:

已知两条直线的斜率是k1,k2,当两条直线平行时,k1=k2,两条直线垂直时,

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2023-08-15 16:18
    关注
    #include <iostream>
    #include <vector>
    #include <map>
    using namespace std;
    
    int calculate(vector<int>& x, vector<int>& y) {
        int maxS= 0;
        for (int i = 0; i < x.size(); i++) {
            map<int, int> X;
            map<int, int> Y;
            for (int j = 0; j < x.size(); j++) {
                if (i == j) continue;
    
                int dx = x[j] - x[i];
                int dy = y[j] - y[i];
    
                X[dx]++;
                Y[dy]++;
            }
    
            for (auto it : X) {
                maxS = max(maxS, it.second + 1);
            }
    
            for (auto it : Y) {
                maxS = max(maxS, it.second + 1);
            }
        }
    
        return maxS;
    }
    
    int main() {
        int n;
        cin >> n;
    
        vector<int> x(n);
        vector<int> y(n);
    
        for (int i = 0; i < n; i++) {
            cin >> x[i];
        }
    
        for (int i = 0; i < n; i++) {
            cin >> y[i];
        }
    
        int result = calculate(x, y);
        cout << result << endl;
        
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月25日
  • 已采纳回答 8月17日
  • 创建了问题 8月15日