Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

求助大佬,讨论区数据都过了。。。

Posted by liuzimingc at 2024-07-25 18:22:34 on Problem 1039
```cpp
#pragma GCC optimize(2)
#pragma GCC optimize(3)

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <vector>
#include <cassert>
 
using namespace std;

namespace liuzimingc {
#define endl '\n'
const int N = 505;
const double eps = 1e-4;

int T, n;

bool equal(double a, double b = 0) { return fabs(a - b) < eps; }

struct point {
	double x, y;
	
	point(double a = 0, double b = 0) { x = a, y = b; }
	
	void input() { scanf("%lf %lf", &x, &y); }
		
	friend point operator +(point a, point b) { return point(a.x + b.x, a.y + b.y); }
	
	friend point operator -(point a, point b) { return point(a.x - b.x, a.y - b.y);	}
	
	friend point operator *(point a, double b) { return point(a.x * b, a.y * b); }
	
	friend point operator /(point a, double b) { return point(a.x / b, a.y / b); }
	
	friend double dot(point a, point b) { return a.x * b.x + a.y * b.y; }
	
	friend double operator *(point a, point b) { return a.x * b.y - a.y * b.x; }
	
	friend bool operator ==(point a, point b) { return equal(a.x, b.x) && equal(a.y, b.y); }
} a[N], b[N];
struct segment {
	point v[2];
	
	segment(point a = point(0, 0), point b = point(0, 0)) { v[0] = a, v[1] = b; }
	
	void input() { v[0].input(), v[1].input(); }
	
	bool include(point p) {
		return equal((v[0] - p) * (v[1] - p)) && dot(v[0] - p, v[1] - p) <= 0;
	}
	
	bool intersect(segment s) {
		if (equal((v[0] - s.v[0]) * (v[1] - s.v[0])) && equal((v[0] - s.v[1]) * (v[1] - s.v[1]))) {
			return include(s.v[0]) || include(s.v[1]);
		}
		return ((v[1] - v[0]) * (s.v[0] - v[0])) * ((v[1] - v[0]) * (s.v[1] - v[0])) <= 0 && ((s.v[1] - s.v[0]) * (v[0] - s.v[0])) * ((s.v[1] - s.v[0]) * (v[1] - s.v[0])) <= 0;
	} // note
	
	double dis() { return sqrt(pow(v[0].x - v[1].x, 2) + pow(v[0].y - v[1].y, 2)); }
};
struct line {
	point v[2];
	
	line(point a = point(0, 0), point b = point(0, 0)) { v[0] = a, v[1] = b; }
	
	void input() { v[0].input(), v[1].input(); }
	
	bool include(point p) {
		return equal((v[0] - p) * (v[1] - p));
	}
	
	bool intersect(segment s) {
		return ((v[0] - s.v[0]) * (v[1] - s.v[0])) * ((v[0] - s.v[1]) * (v[1] - s.v[1])) <= 0;
	} // note about -1 / 1?
	
	bool fuck(segment s) {
		return ((v[0] - s.v[0]) * (v[1] - s.v[0])) * ((v[0] - s.v[1]) * (v[1] - s.v[1])) < 0;
	}
	
	bool intersect(line l) {
		// return !equal((v[0] - v[1]) * (l.v[0] - l.v[1]));
		return (v[0] - v[1]) * (l.v[0] - l.v[1]) < 0;
	}
	
	point intersection(line l) {
		double s1 = (l.v[0] - v[0]) * (l.v[1] - v[0]), s2 = (l.v[1] - v[1]) * (l.v[0] - v[1]);
		return v[0] + (v[1] - v[0]) * s1 / (s1 + s2);
	}
};

double get(line l) {
	if (!l.intersect(segment(a[1], b[1]))) return -1e18;
	for (int i = 2; i <= n; i++) {
		if (l.intersect(segment(a[i], b[i]))) continue;
		if (l.fuck(segment(a[i], a[i - 1]))) return l.intersection(line(a[i], a[i - 1])).x;
		if (l.fuck(segment(b[i], b[i - 1]))) return l.intersection(line(b[i], b[i - 1])).x;
		return a[i - 1].x;
	}
	return a[n].x;
}

int main() {
//	ios::sync_with_stdio(false);
//	cin.tie(0); cout.tie(0);
	while (~scanf("%d", &n) && n) {
		for (int i = 1; i <= n; i++) a[i].input(), b[i] = point(a[i].x, a[i].y - 1);
		if (n <= 2) {
			puts("Through all the pipe.");
			continue;
		}
		double ans = a[0].x;
		for (int i = 1; i <= n; i++)
			for (int j = i + 1; j <= n; j++) {
//				ans = max(ans, get(line(a[i], a[j])));
				ans = max(ans, get(line(a[i], b[j])));
				ans = max(ans, get(line(b[i], a[j])));
//				ans = max(ans, get(line(b[i], b[j])));
			}
		if (equal(ans - a[n].x)) puts("Through all the pipe.");
		else printf("%.2f\n", ans);
	}
	return 0;
}
#undef int
} // namespace liuzimingc
    
int main() {
	liuzimingc::main();
	return 0;
}
```

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator