Facebook
From Sludgy Kitten, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 228
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <ctime>
  4. #include <vector>
  5. #include <cmath>
  6. #include <string>
  7. struct wektor { double x, y, param; };
  8. std::vector<wektor> lista;
  9. double n = 20, maxi=0;
  10. std::string wynik = "";
  11. void adam(std::string s) {
  12.         if(s.length() < n) {
  13.                 adam(s+"0");
  14.                 adam(s+"1");
  15.                 return;
  16.         }
  17.         //printf(s.c_str());
  18.         //printf(": ");
  19.         double dX=0, dY=0;
  20.         for(int i = 0; i < n; i++)
  21.                 if(s[i] == '1') {
  22.                         dX += lista[i].x;
  23.                         dY += lista[i].y;
  24.                 }
  25.         double odl = dX*dX+dY*dY;
  26.         //printf("%0.0f\n", odl);
  27.         if(odl > maxi) {
  28.                 maxi = odl;
  29.                 wynik = s;
  30.         }
  31. }
  32. bool porownaj(wektor w1, wektor w2) {
  33.         if(w1.param > w2.param) return false;
  34.         return true;
  35. }
  36. void zeruj() {
  37.         lista.resize(0);
  38.         wynik = "";
  39.         maxi = 0;
  40. }
  41. void cwiartuj() {
  42.         printf("1:\n");
  43.         for(int i = 0; i < n; i++) {
  44.                 if(!(lista[i].x >= 0 && lista[i].y >= 0)) continue;
  45.                 if(wynik[i]=='1') printf("TAK: ");
  46.                 else printf("   : ");
  47.                 printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param);
  48.         }
  49.  
  50.         printf("2:\n");
  51.         for(int i = 0; i < n; i++) {
  52.                 if(!(lista[i].x < 0 && lista[i].y > 0)) continue;
  53.                 if(wynik[i]=='1') printf("TAK: ");
  54.                 else printf("   : ");
  55.                 printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param);
  56.         }
  57.         printf("3:\n");
  58.         for(int i = 0; i < n; i++) {
  59.                 if(!(lista[i].x <= 0 && lista[i].y <= 0)) continue;
  60.                 if(wynik[i]=='1') printf("TAK: ");
  61.                 else printf("   : ");
  62.                 printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param);
  63.         }
  64.         printf("4:\n");
  65.         for(int i = 0; i < n; i++) {
  66.                 if(!(lista[i].x > 0 && lista[i].y < 0)) continue;
  67.                 if(wynik[i]=='1') printf("TAK: ");
  68.                 else printf("   : ");
  69.                 printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param);
  70.         }
  71. }
  72. double sortuj(double x, double y) {
  73.         double kat = atan2(y, x) * 180/M_PI;
  74.         if(kat < 0) kat += 360;
  75.         //printf("%lf\n", kat);
  76.         return kat;
  77. }
  78. void wczytaj() {
  79.         n=12;
  80.         for(int i = 0; i < n; i++) {
  81.                 double X = 0;
  82.                 double Y = 0;
  83.                 scanf("%lf%lf", &X, &Y);
  84.                 lista.push_back({X, Y, sortuj(X, Y)});
  85.                 //DX += X; DY += Y;
  86.         }      
  87. }
  88. double DX, DY;
  89. void losuj() {
  90.         for(int i = 0; i < n; i++) {
  91.                         double X = rand()%10-5;
  92.                         double Y = rand()%10-5;
  93.                         lista.push_back({X, Y, sortuj(X, Y)});
  94.                         DX += X; DY += Y;
  95.                 }      
  96. }
  97. void gasiennica() {
  98.        
  99. }
  100. int main() {
  101.         srand(time(NULL));
  102.         //losuj();
  103.         wczytaj();
  104.         sort(lista.begin(), lista.end(), porownaj);
  105.         printf("%0.0f, %0.0f\n", DX, DY);
  106.         adam("");
  107.         printf("%0.0f, ", maxi);
  108.         printf(wynik.c_str());
  109.         printf("\n");
  110.         //cwiartuj();
  111.         for(int i = 0; i < n; i++) {
  112.                 if(wynik[i]=='1') printf("TAK: ");
  113.                 else printf("   : ");
  114.                 printf("[%0.0f, %0.0f], %lf\n", lista[i].x, lista[i].y, lista[i].param);
  115.         }
  116.        
  117. }