Ranking (as of 2014-06-15): 238 out of 517
Language: C++
/*
UVa 10947 - Bear with me, again..
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_10947_Bear_with_me_again.cpp
*/
#include <cstdio>
#include <cmath>
const int n_max = 100;
struct island {
int x_, y_, r_;
} islands[n_max + 2];
bool matrix[n_max + 2][n_max + 2];
void floyd_warshall(int n)
{
for (int k = 0; k < n; k++)
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (matrix[i][k] && matrix[k][j])
matrix[i][j] = true;
}
int main()
{
int k, m;
while (scanf("%d %d", &k, &m) != EOF) {
double d_max = static_cast<double>(k) * m;
scanf("%d %d %d", &islands[0].x_, &islands[0].y_, &islands[0].r_);
// current island
scanf("%d %d %d", &islands[1].x_, &islands[1].y_, &islands[1].r_);
// home island
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d %d %d",
&islands[i + 2].x_, &islands[i + 2].y_, &islands[i + 2].r_);
for (int i = 0; i < n + 2; i++) {
matrix[i][i] = true;
for (int j = i + 1; j < n + 2; j++) {
double dx = islands[i].x_ - islands[j].x_,
dy = islands[i].y_ - islands[j].y_;
double d = dx * dx + dy * dy,
dr = d_max + islands[i].r_ + islands[j].r_;
matrix[i][j] = matrix[j][i] = d <= dr * dr;
// sqrt(d) - islands[i].r_ - islands[j].r_ <= dr
}
}
floyd_warshall(n + 2);
puts((matrix[0][1]) ? "Larry and Ryan will escape!" :
"Larry and Ryan will be eaten to death.");
}
return 0;
}
No comments:
Post a Comment