#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); vectorsegmentos; 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