跳跳 - Problem - Daimayuan Online Judge
给定n个点,从某个点(x,y)跳到其他点,每次跳到 (x + a,x+b),可以跳多次,但每次只有一个(a, b) 可选
问(a,b)最少有几种?
n 只有500,暴力跑出所有情况,时间复杂度: O ( n 2 ) O(n^2) O(n2)
因为可以走多次,存最下步,最后统计个数
#define rep(i,l,r) for(int i = l; i <= r; i++)
#define PII pair<int,int>
void solve()
{
cin >> n;
map<PII,int> mp;
rep(i,1,n) {
cin >> a[i].ff >> a[i].ss;
}
rep(i,1,n) {
rep(j,1,n) {
if(i==j) continue;
int x = a[i].ff - a[j].ff;
int y = a[i].ss - a[j].ss;
int tmp = __gcd(x,y);
//cout << x << " " << y << endl;
x /= abs(tmp);
y /= abs(tmp);
mp[{x,y}]++;
}
}
cout << mp.size() << endl;
}