#include #include #include #include #include #include struct wektor { double x, y, param; }; std::vector lista; double n = 20, maxi=0; std::string wynik = ""; void adam(std::string s) { if(s.length() < n) { adam(s+"0"); adam(s+"1"); return; } //printf(s.c_str()); //printf(": "); double dX=0, dY=0; for(int i = 0; i < n; i++) if(s[i] == '1') { dX += lista[i].x; dY += lista[i].y; } double odl = dX*dX+dY*dY; //printf("%0.0f\n", odl); if(odl > maxi) { maxi = odl; wynik = s; } } bool porownaj(wektor w1, wektor w2) { if(w1.param > w2.param) return false; return true; } void zeruj() { lista.resize(0); wynik = ""; maxi = 0; } void cwiartuj() { printf("1:\n"); for(int i = 0; i < n; i++) { if(!(lista[i].x >= 0 && lista[i].y >= 0)) continue; if(wynik[i]=='1') printf("TAK: "); else printf(" : "); printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param); } printf("2:\n"); for(int i = 0; i < n; i++) { if(!(lista[i].x < 0 && lista[i].y > 0)) continue; if(wynik[i]=='1') printf("TAK: "); else printf(" : "); printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param); } printf("3:\n"); for(int i = 0; i < n; i++) { if(!(lista[i].x <= 0 && lista[i].y <= 0)) continue; if(wynik[i]=='1') printf("TAK: "); else printf(" : "); printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param); } printf("4:\n"); for(int i = 0; i < n; i++) { if(!(lista[i].x > 0 && lista[i].y < 0)) continue; if(wynik[i]=='1') printf("TAK: "); else printf(" : "); printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param); } } double sortuj(double x, double y) { double kat = atan2(y, x) * 180/M_PI; if(kat < 0) kat += 360; //printf("%lf\n", kat); return kat; } void wczytaj() { n=12; for(int i = 0; i < n; i++) { double X = 0; double Y = 0; scanf("%lf%lf", &X, &Y); lista.push_back({X, Y, sortuj(X, Y)}); //DX += X; DY += Y; } } double DX, DY; void losuj() { for(int i = 0; i < n; i++) { double X = rand()%10-5; double Y = rand()%10-5; lista.push_back({X, Y, sortuj(X, Y)}); DX += X; DY += Y; } } void gasiennica() { } int main() { srand(time(NULL)); //losuj(); wczytaj(); sort(lista.begin(), lista.end(), porownaj); printf("%0.0f, %0.0f\n", DX, DY); adam(""); printf("%0.0f, ", maxi); printf(wynik.c_str()); printf("\n"); //cwiartuj(); for(int i = 0; i < n; i++) { if(wynik[i]=='1') printf("TAK: "); else printf(" : "); printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param); } }