Ranking (as of 2013-11-23): 528 out of 672
Language: C++
/*
UVa 837 - Light and Transparencies
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_837_Light_and_Transparencies.cpp
*/
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
using namespace std;
struct point {
double x_;
int tci_; // index to tcs[]
};
struct tc { // transparent coeficients
bool effective_;
double r_;
};
bool compare_point(const point& p, const point& q)
{
return p.x_ < q.x_;
}
int main()
{
int t;
cin >> t;
while (t--) {
int nl;
cin >> nl;
int np = nl * 2;
vector<point> points(np);
vector<tc> tcs(nl);
for (int i = 0; i < nl; i++) {
double y1, y2;
cin >> points[i * 2].x_ >> y1 >> points[i * 2 + 1].x_ >> y2 >> tcs[i].r_;
points[i * 2].tci_ = points[i * 2 + 1].tci_ = i;
tcs[i].effective_ = false;
}
sort(points.begin(), points.end(), compare_point);
cout << np + 1 << endl;
cout << fixed;
for (int i = 0; i <= np; i++) {
if (i)
cout << setprecision(3) << points[i - 1].x_;
else
cout << "-inf";
if (i < np)
cout << ' ' << setprecision(3) << points[i].x_;
else
cout << " +inf";
double pl = 1.0; // percentage of light
if (i && i < np) {
for (int j = 0; j < nl; j++)
if (tcs[j].effective_)
pl *= tcs[j].r_;
}
cout << ' ' << setprecision(3) << pl << endl;
if (i < np)
tcs[points[i].tci_].effective_ = !tcs[points[i].tci_].effective_;
}
if (t)
cout << endl;
}
return 0;
}
No comments:
Post a Comment