CodeForces 514B - Watto and Mechanism
这题看网上题解,都是相除然后什么暴力的,感觉没有必要。实际上就是计算每个点相当于炮塔的斜率,考虑到斜率是浮点数,因此可以把分数约分,然后比较有多少个这样不同的最简分数即可。刚开始用数组开的比较大内存超限了,后来改用map辅助pair占用空间就少了。
#include <bits/stdc++.h> using namespace std; set<pair<int, int>> s; int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } int main() { int n, x, y; cin >> n >> x >> y; int cnt = 0; while(n--){ int r, c; cin >> r >> c; r -= x; c -= y; int g = gcd(r, c); r /= g; c /= g; if(!s.count(make_pair(r, c))){ cnt++; s.insert(make_pair(r, c)); } } cout << cnt << endl; return 0; }