#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " -- "<< #b << " = " << b << endl;
#define foreach(it, l) for(typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
struct segmento{
double x0, x, factor;
segmento(double px0, double px, double pfactor):x0(px0), x(px), factor(pfactor){};
};
int main(){
int t, n;
double x1, y1, x2, y2, factor;
char num_seg[10];
string linea;
stringstream ss;
cin.getline(num_seg, 10, '\n');
t = atoi(num_seg);
vector segmentos;
vector puntos;
for(int i = 0; i < t; i++){
segmentos.clear();
puntos.clear();
getchar();
cin.getline(num_seg, 10, '\n');
n = atoi(num_seg);
for(int k = 0; k < n; k++){
getline(cin , linea);
ss.clear();
ss << linea;
ss >> x1 >> y1 >> x2 >> y2 >> factor;
puntos.push_back(x1);
puntos.push_back(x2);
if(x1 > x2) swap(x1, x2);
segmento el_segmento(x1, x2, factor);
segmentos.push_back(el_segmento);
}
//para los puntos
set setpuntos(puntos.begin(), puntos.end());
vector puntitos(setpuntos.begin(), setpuntos.end());
sort(puntitos.begin(), puntitos.end());
int puntos_size = puntitos.size();
printf("%d\n", puntos_size + 1);
printf("-inf %.3f 1.000\n",puntitos[0]);
for(int k = 0; k + 1 < puntos_size; k++){
factor = 1.0;
double x = puntitos[k];
for(int h = 0; h < segmentos.size(); h++){
if(segmentos[h].x0 <= x && x < segmentos[h].x)
factor *= segmentos[h].factor;
}
printf("%.3f %.3f %.3f\n",x, puntitos[k + 1], factor);
}
printf("%.3f +inf 1.000\n",puntitos[puntos_size - 1]);
if(i + 1 != t) printf("\n");
}
return 0;
}
lunes, 24 de octubre de 2011
837 - Light and Transparency, uva
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario