Submission #1794722
Source Code Expand
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
//---------------------------------------------------------------------------------------------------
const double EPS = 1e-8, INF = 1e12, PI = 2 * acos(0.0);
typedef complex<double> P;
namespace std {
bool operator < (const P& a, const P& b) { return real(a) != real(b) ? real(a) < real(b) : imag(a) < imag(b); }
bool operator == (const P& a, const P& b) { return abs(real(a) - real(b)) < EPS && abs(imag(a) - imag(b)) < EPS; }
P operator / (const P& a, const double& b) { return P(real(a) / b, imag(a) / b); }
P operator * (const P& a, const double& b) { return P(real(a) * b, imag(a) * b); }
}
double cross(const P& a, const P& b) { return imag(conj(a)*b); }
double dot(const P& a, const P& b) { return real(conj(a)*b); }
struct L : public vector<P> { L() {} L(const P &a, const P &b) { push_back(a); push_back(b); } };
typedef vector<P> G;
struct C { P p; double r; C() {} C(const P &p, double r) : p(p), r(r) {} };
int ccw(P a, P b, P c) {
b -= a; c -= a;
if (cross(b, c) > 0) return +1; // counter clockwise
if (cross(b, c) < 0) return -1; // clockwise
if (dot(b, c) < 0) return +2; // c--a--b on line
if (norm(b) < norm(c)) return -2; // a--b--c on line
return 0;
}
P rotate(P vec, double ang) {
double x = real(vec), y = imag(vec);
return P(x * cos(ang) - y * sin(ang), x * sin(ang) + y * cos(ang));
}
// 投影
P projection(const L &l, const P &p) {
double t = dot(p - l[0], l[0] - l[1]) / norm(l[0] - l[1]);
return l[0] + t*(l[0] - l[1]);
}
// 反射
P reflection(const L &l, const P &p) {
return p + (projection(l, p) - p) * 2;
}
// 法線
P normal(const P& p)
{
return P(-imag(p), real(p));
}
bool intersectLL(const L &l, const L &m) {
return abs(cross(l[1] - l[0], m[1] - m[0])) > EPS || // non-parallel
abs(cross(l[1] - l[0], m[0] - l[0])) < EPS; // same line
}
bool intersectLS(const L &l, const L &s) {
return cross(l[1] - l[0], s[0] - l[0])* // s[0] is left of l
cross(l[1] - l[0], s[1] - l[0]) < EPS; // s[1] is right of l
}
bool intersectLP(const L &l, const P &p) {
return abs(cross(l[1] - p, l[0] - p)) < EPS;
}
bool intersectSS(const L &s, const L &t) {
return ccw(s[0], s[1], t[0])*ccw(s[0], s[1], t[1]) <= 0 &&
ccw(t[0], t[1], s[0])*ccw(t[0], t[1], s[1]) <= 0;
}
bool intersectSP(const L &s, const P &p) {
return abs(s[0] - p) + abs(s[1] - p) - abs(s[1] - s[0]) < EPS; // triangle inequality
}
P crosspoint(const L &l, const L &m) {
double A = cross(l[1] - l[0], m[1] - m[0]);
double B = cross(l[1] - l[0], l[1] - m[0]);
if (abs(A) < EPS && abs(B) < EPS) return m[0]; // same line
if (abs(A) < EPS) assert(false); // !!!PRECONDITION NOT SATISFIED!!!
return m[0] + B / A * (m[1] - m[0]);
}
double distanceLP(const L &l, const P &p) {
return abs(p - projection(l, p));
}
double distanceLL(const L &l, const L &m) {
return intersectLL(l, m) ? 0 : distanceLP(l, m[0]);
}
double distanceLS(const L &l, const L &s) {
if (intersectLS(l, s)) return 0;
return min(distanceLP(l, s[0]), distanceLP(l, s[1]));
}
double distanceSP(const L &s, const P &p) {
const P r = projection(s, p);
if (intersectSP(s, r)) return abs(r - p);
return min(abs(s[0] - p), abs(s[1] - p));
}
double distanceSS(const L &s, const L &t) {
if (intersectSS(s, t)) return 0;
return min(min(distanceSP(s, t[0]), distanceSP(s, t[1])),
min(distanceSP(t, s[0]), distanceSP(t, s[1])));
}
/*---------------------------------------------------------------------------------------------------
∧_∧
∧_∧ (´<_` ) Welcome to My Coding Space!
( ´_ゝ`) / ⌒i
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ _/ .| .|____
\/____/ (u ⊃
---------------------------------------------------------------------------------------------------*/
int N, R[20], SX[20], SY[20], TX[20], TY[20];
int dp[1 << 16];
//---------------------------------------------------------------------------------------------------
void _main() {
cin >> N;
rep(i, 0, N) cin >> R[i] >> SX[i] >> SY[i] >> TX[i] >> TY[i];
dp[0] = 1;
rep(msk, 0, 1 << N) if (dp[msk]) rep(i, 0, N) if (!(msk & (1 << i))) {
L l(P(SX[i], SY[i]), P(TX[i], TY[i]));
vector<P> v; vector<int> r;
rep(j, 0, N) if (i != j) {
if (msk & (1 << j)) v.push_back(P(TX[j], TY[j])), r.push_back(R[j]);
else v.push_back(P(SX[j], SY[j])), r.push_back(R[j]);
}
int ok = 1, n = v.size();
rep(j, 0, n) {
double d = distanceSP(l, v[j]);
if (d < R[i] + r[j] - EPS) ok = 0;
}
if (ok) dp[msk + (1 << i)] = 1;
}
int ans = 0;
rep(msk, 0, 1 << N) if (dp[msk]) {
int c = 0;
rep(i, 0, N) if (msk & (1 << i)) c++;
ans = max(ans, c);
}
cout << ans << endl;
}
Submission Info
Submission Time |
|
Task |
G - Coin Slider |
User |
hamayanhamayan |
Language |
C++14 (GCC 5.4.1) |
Score |
100 |
Code Size |
5442 Byte |
Status |
AC |
Exec Time |
684 ms |
Memory |
512 KB |
Judge Result
Set Name |
All |
Score / Max Score |
100 / 100 |
Status |
|
Set Name |
Test Cases |
All |
00_sample_00, 00_sample_01, 00_sample_02, 10_random_0, 10_random_1, 10_random_2, 10_random_3, 10_random_4, 10_random_5, 10_random_6, 10_random_7, 10_random_8, 10_random_9, 20_small_r_0, 20_small_r_1, 20_small_r_2, 20_small_r_3, 20_small_r_4, 20_small_r_5, 20_small_r_6, 20_small_r_7, 20_small_r_8, 20_small_r_9, 90_align_0, 91_star_0, 99_max_0, 99_max_1 |
Case Name |
Status |
Exec Time |
Memory |
00_sample_00 |
AC |
1 ms |
256 KB |
00_sample_01 |
AC |
1 ms |
256 KB |
00_sample_02 |
AC |
1 ms |
256 KB |
10_random_0 |
AC |
2 ms |
256 KB |
10_random_1 |
AC |
1 ms |
256 KB |
10_random_2 |
AC |
1 ms |
256 KB |
10_random_3 |
AC |
1 ms |
256 KB |
10_random_4 |
AC |
1 ms |
256 KB |
10_random_5 |
AC |
1 ms |
256 KB |
10_random_6 |
AC |
1 ms |
256 KB |
10_random_7 |
AC |
1 ms |
256 KB |
10_random_8 |
AC |
1 ms |
256 KB |
10_random_9 |
AC |
1 ms |
256 KB |
20_small_r_0 |
AC |
1 ms |
256 KB |
20_small_r_1 |
AC |
6 ms |
256 KB |
20_small_r_2 |
AC |
1 ms |
256 KB |
20_small_r_3 |
AC |
2 ms |
256 KB |
20_small_r_4 |
AC |
2 ms |
256 KB |
20_small_r_5 |
AC |
1 ms |
256 KB |
20_small_r_6 |
AC |
2 ms |
256 KB |
20_small_r_7 |
AC |
27 ms |
256 KB |
20_small_r_8 |
AC |
2 ms |
256 KB |
20_small_r_9 |
AC |
1 ms |
256 KB |
90_align_0 |
AC |
2 ms |
256 KB |
91_star_0 |
AC |
2 ms |
256 KB |
99_max_0 |
AC |
676 ms |
512 KB |
99_max_1 |
AC |
684 ms |
512 KB |