牧羊犬
描述
小明养了一只牧羊犬,牧羊犬很聪明,能够驱赶羊群,现在把整个草场看作是一个平面直角坐标系,原点在草场的正中央,现在牧羊犬可以让草场所有的羊朝某个方向平移,或者整个羊群绕着原点随意旋转,现在小明想要知道牧羊犬在经过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,两条直线垂直时,
#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;
}
【以下回答由 GPT 生成】
我们可以使用遍历的方法,对于每只羊,计算它所在的直线的斜率,然后统计每个斜率的出现次数,找到出现次数最多的斜率的羊的数量。具体步骤如下:
【相关推荐】