結果

問題 No.245 貫け!
ユーザー kei
提出日時 2018-09-26 01:22:32
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 190 ms / 5,000 ms
コード長 4,884 bytes
コンパイル時間 1,844 ms
コンパイル使用メモリ 172,156 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-10-07 15:48:42
合計ジャッジ時間 4,223 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 16
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int INF = 1e9;
const ll LINF = 1e18;
template<class S, class T> ostream& operator << (ostream& out, const pair<S, T>& o) { out << "(" << o.first << "," << o.second << ")"; return out; }
template<class T> ostream& operator << (ostream& out, const vector<T> V) { for (int i = 0; i < V.size(); i++) { out << V[i]; if (i != V.size() - 1)
    out << " "; } return out; }
template<class T> ostream& operator << (ostream& out, const vector<vector<T> > Mat) { for (int i = 0; i < Mat.size(); i++) { if (i != 0) out << endl;
    out << Mat[i]; } return out; }
template<class S, class T> ostream& operator << (ostream& out, const map<S, T> mp) { out << "{ "; for (auto it = mp.begin(); it != mp.end(); it++) {
    out << it->first << ":" << it->second; if (mp.size() - 1 != distance(mp.begin(), it)) out << ", "; } out << " }"; return out; }
/*
<url:https://yukicoder.me/problems/no/245>
============================================================
=================================================================
=============================================================
================================================================
*/
typedef long double ld;
typedef complex<ld> Point;
const ld eps = 1e-9, pi = acos(-1.0);
namespace std {
bool operator<(const Point &lhs, const Point &rhs) {
if (lhs.real() < rhs.real() - eps) return true;
if (lhs.real() > rhs.real() + eps) return false;
return lhs.imag() < rhs.imag();
}
}
Point input_point() { ld x, y; cin >> x >> y; return Point(x, y); } //
bool eq(ld a, ld b) { return (abs(a - b) < eps); } //
ld dot(Point a, Point b) { return real(conj(a) * b); } //
ld cross(Point a, Point b) { return imag(conj(a) * b); } //
//
class Line {
public:
Point a, b;
Line() : a(Point(0, 0)), b(Point(0, 0)) {}
Line(Point a, Point b) : a(a), b(b) {}
Point operator[](const int _num) {
if (_num == 0)return a;
else if (_num == 1)return b;
else assert(false);
}
};
ostream& operator << (ostream& out, const Line& line) {
out << "[" << line.a << "," << line.b << "]";
return out;
}
//
class Circle {
public:
Point p;
ld r;
Circle() : p(Point(0, 0)), r(0) {}
Circle(Point p, ld r) : p(p), r(r) {}
};
// CCW
int ccw(Point a, Point b, Point c) {
b -= a; c -= a;
if (cross(b, c) > eps) return 1; // a,b,c
if (cross(b, c) < -eps) return -1; // a,b,c
if (dot(b, c) < 0) return 2; // c,a,b
if (norm(b) < norm(c)) return -2; // a,b,c
return 0; // a,c,b
}
/* */
//
bool isis_ll(Line l, Line m) { return !eq(cross(l.b - l.a, m.b - m.a), 0); }
//
bool isis_ls(Line l, Line s) {
return isis_ll(l, s) &&
(cross(l.b - l.a, s.a - l.a) * cross(l.b - l.a, s.b - l.a) < eps);
}
//
bool isis_ss(Line s, Line t) {
return ccw(s.a, s.b, t.a) * ccw(s.a, s.b, t.b) <= 0 &&
ccw(t.a, t.b, s.a) * ccw(t.a, t.b, s.b) <= 0;
}
//
bool isis_lp(Line l, Point p) { return (abs(cross(l.b - p, l.a - p)) < eps); }
//
bool isis_sp(Line s, Point p) { return (abs(s.a - p) + abs(s.b - p) - abs(s.b - s.a) < eps); }
//
Point proj(Line l, Point p) {
ld t = dot(p - l.a, l.a - l.b) / norm(l.a - l.b);
return l.a + t * (l.a - l.b);
}
//
ld dist_lp(Line l, Point p) {
return abs(p - proj(l, p));
}
//
ld dist_ls(Line l, Line s) {
return isis_ls(l, s) ? 0 : min(dist_lp(l, s.a), dist_lp(l, s.b));
}
int solve() {
int res = 1;
int N; cin >> N;
vector<Line> lines(N);
for (int i = 0; i < N;i++) {
lines[i] = Line(input_point(), input_point());
}
for (int i = 0; i < N;i++) {
for (int j = i + 1; j < N;j++) {
{
int cnt = 0;
Line line(lines[i].a, lines[j].a);
for (int k = 0; k < N;k++) {
cnt += (dist_ls(line, lines[k]) < eps);
}
res = max(res, cnt);
}
{
int cnt = 0;
Line line(lines[i].a, lines[j].b);
for (int k = 0; k < N;k++) {
cnt += (dist_ls(line, lines[k]) < eps);
}
res = max(res, cnt);
}
{
int cnt = 0;
Line line(lines[i].b, lines[j].a);
for (int k = 0; k < N;k++) {
cnt += (dist_ls(line, lines[k]) < eps);
}
res = max(res, cnt);
}
{
int cnt = 0;
Line line(lines[i].b, lines[j].b);
for (int k = 0; k < N;k++) {
cnt += (dist_ls(line, lines[k]) < eps);
}
res = max(res, cnt);
}
}
}
return res;
}
int main(void) {
cin.tie(0); ios_base::sync_with_stdio(false);
cout << solve() << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0