Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema cherhanale:
#include <fstream>
#include <iomanip>
#include <iostream>
#include <cmath>
#define DIM 10010
#define x first
#define y second
#define eps 0.000001
using namespace std;
int n, i;
double det(double X1, double Y1, double X2, double Y2, double X3, double Y3) {
return (X2-X1)*(Y3-Y1) - (X3-X1)*(Y2-Y1);
}
double modul(double x) {
if (x < 0)
return -x;
else
return x;
}
double dist(double x1, double y1, double x2, double y2) {
return sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2));
}
pair<double, double> simetric(double x1, double y1, double x2, double y2, double x3, double y3) {
int tip;
pair<double, double> r;
if (x1 == x2) {
r.y = y3;
r.x = 2 * x1 - x3;
return r;
}
if (y1 == y2) {
r.x = x3;
r.y = 2 * y1 - y3;
return r;
}
if (x1 > x2) {
swap(x1, x2);
swap(y1, y2);
}
if (y2 > y1)
tip = 1;
else
tip = 0;
double a = y2 - y1;
double b = x1 - x2;
double c = y1 * (x2 - x1) - x1 * (y2 - y1);
double D = modul(a*x3 + b*y3 + c) / sqrt(a*a + b*b);
double y4 = (-a*x3 - c) / b;
double h = D * sqrt( (y3-y4) * (y3-y4) - D*D ) / (y3 - y4);
double x;
if (tip)
x = x3 + h;
else
x = x3 - h;
double y = (-a*x - c) / b;
if (tip)
r.x = x + h;
else
r.x = x - h;
///if (tip)
r.y = y - (y3-y);
///else
/// r.y = y + (y3-y);
return r;
}
int main () {
ifstream fin ("cherhanale.in");
ofstream fout("cherhanale.out");
fin>>n;
double xc = 0, yc = 0, x1, y1, x2, y2, x, y, sol = 0;
pair<double, double> r;
for (i=1;i<=n;i++) {
fin>>x1>>y1>>x2>>y2>>x>>y;
if (det (x1, y1, x2, y2, xc, yc) * det(x1, y1, x2, y2, x, y) > 0) {
r = simetric(x1, y1, x2, y2, x, y);
sol += dist(xc, yc, r.x, r.y);
} else {
sol += dist(xc, yc, x, y);
}
xc = x;
yc = y;
}
fout<<setprecision(5)<<fixed<<(long long)(sol*100000)/100000.0;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2511 cherhanale
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2511 cherhanale de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!