kuoe0
1/14/2012 - 12:04 PM

## [UVa] 837 - Light and Transparencies - http://kuoe0.ch/377/uva-837-light-and-transparencies/

[UVa] 837 - Light and Transparencies - http://kuoe0.ch/377/uva-837-light-and-transparencies/

``````#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
using namespace std;

struct POINT  {
int x;
bool end;
double c;

bool operator< ( const POINT r ) const {
return x < r.x;
}
};

int toInt( char *s ) {
int ret = 0;
for ( int i = 0; s[ i ]; ++i )
if ( s[ i ] != '.' )
ret = ret * 10 + s[ i ] - '0';
return ret;
}

POINT pt[ 10000 ];

int main() {

int t, n;
scanf( "%d", &t );

while ( t-- ) {
scanf( "%d", &n );
char buf[ 100 ];
for ( int i = 0; i < n; ++i ) {
scanf( "%s", buf );
int x1 = toInt( buf );

scanf( "%s", buf );
scanf( "%s", buf );
int x2 = toInt( buf );

scanf( "%s", buf );
double c;
scanf( "%lf", &c );

if ( x1 > x2 )
swap( x1, x2 );

pt[ i ].x = x1, pt[ i ].end = 0, pt[ i ].c = c;
pt[ n + i ].x = x2, pt[ n + i ].end = 1, pt[ n + i ].c = c;
}
sort( pt, pt + n * 2 );
double e = 1;
int now = pt[ 0 ].x;
printf( "%d\n", n * 2 + 1 );
printf( "-inf %.3lf %.3lf\n", ( double )now / 10, e );

for ( int i = 0; i < n * 2; ++i ) {
if ( now != pt[ i ].x )
printf( "%.3lf %.3lf %.3lf\n", ( double )now / 10, pt[ i ].x / ( double )10, e );

if ( !pt[ i ].end )
e *= pt[ i ].c;
else
e /= pt[ i ].c;

now = pt[ i ].x;
}

printf( "%.3lf +inf %.3lf\n", ( double )now / 10, e );
if ( t )
puts( "" );
}
return 0;
}
``````