这是本文档旧的修订版!
这场彻底跪了。
那我贴一贴莫名WA掉的代码们吧。如果读者能找到到底是哪里WA掉了,麻烦您联系我一下。
我觉得从奇顶点开始DFS一定没错。但是评测机不这么认为……
储存斜率用了两种做法。开longlong那个TLE掉了,double那个WA了,实在无语……
#include<iostream> #include<vector> #include<map>
using namespace std;
#define x first #define y second
vector<pair<double,double> > points;
int maxPoints() {
int res = 0; for (int i = 0; i < points.size(); ++i) { map<double,int> m; int duplicate = 1; for (int j = i + 1; j < points.size(); ++j) { if (points[i].x== points[j].x&& points[i].y== points[j].y) { ++duplicate; continue; } if(points[j].x*points[i].y==points[i].x*points[j].y) { continue; } double dx = points[j].x- points[i].x; double dy = points[j].y- points[i].y; ++m[{dx/dy}]; } res = max(res, duplicate); map<double,int>::iterator it; for (it = m.begin(); it != m.end(); ++it) { res = max(res, it->second + duplicate); } } return res;
}
int main() {
int n; scanf("%d",&n); double x,y; while(n--) { cin >> x >> y; double temp=x*x+y*y; points.push_back(make_pair(x/temp,y/temp)); } cout << maxPoints() << endl; return 0 ;
}
#include<iostream> #include<vector> #include<map>
using namespace std;
vector<pair<long long,long long> > points;
long long gcd(long long a,long long b) {
return (b == 0) ? a : gcd(b, a % b);
}
int maxPoints() {
int res = 0; for (int i = 0; i < points.size(); ++i) { map<pair<int, int>, int> m; int duplicate = 1; for (int j = i + 1; j < points.size(); ++j) { if (points[i].first== points[j].first&& points[i].second== points[j].second) { ++duplicate; continue; } long long x1=points[i].first; long long x2=points[j].first; long long y1=points[i].second; long long y2=points[j].second; if(x1*y2==y1*x2) { continue; } long long dx =x2*(x1*x1+y1*y1)-x1*(x2*x2+y2*y2); long long dy =y2*(x1*x1+y1*y1)-y1*(x2*x2+y2*y2); long long d = gcd(dx, dy); ++m[{dx / d, dy / d}]; } res = max(res, duplicate); map<pair<int,int>,int>::iterator it; for(it = m.begin(); it != m.end(); ++it) { res = max(res, it->second + duplicate); } } return res;
}
int main() {
int n; scanf("%d",&n); long long x,y; while(n--) { cin >> x >> y; points.push_back(make_pair(x,y)); } cout << maxPoints() << endl; return 0 ;
}