Advertisement
a53

colibri

a53
Aug 23rd, 2022
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. #include <fstream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5. ifstream fin ("colibri.in");
  6. ofstream fout ("colibri.out");
  7. const int nMAX = 50e3;
  8. vector<pair<int, double>> poz;
  9. vector<pair<int, double>> neg;
  10. int nul = 0; /// pozitia unui element nul
  11. bool sol[nMAX + 1];
  12. int a[nMAX + 1], b[nMAX + 1], c[nMAX + 1];
  13.  
  14. bool cmpless(const pair<int, double> &a, const pair<int, double> &b)
  15. { return (a.second < b.second); }
  16.  
  17. bool cmpgreater(const pair<int, double> &a, const pair<int, double> &b)
  18. { return (a.second > b.second); }
  19.  
  20.  
  21. int main()
  22. {
  23. int n, i;
  24. fin >> n;
  25. for (i = 1; i <= n; ++i)
  26. {
  27. fin >> a[i] >> b[i] >> c[i];
  28. if (b[i] == 0)
  29. nul = i;
  30. else if (a[i] % 2 == 0)
  31. poz.emplace_back(i, 1.*b[i]/c[i]);
  32. else if (a[i] % 2 == 1)
  33. neg.emplace_back(i, -1.*b[i]/c[i]);
  34. }
  35. sort(poz.begin(), poz.end(), cmpgreater); // 9, 4.2, 0.6
  36. sort(neg.begin(), neg.end(), cmpless); // -6.9, -4, -2
  37. bool solu = 0;
  38. /// punem toate numerele pozitive mai mari sau egale cu 1.
  39. for (i = 0; i < poz.size() && poz[i].second >= 1; ++i)
  40. sol[poz[i].first] = 1,
  41. solu = 1;
  42. /// punem perechi de cate 2 numere negative pana cand ..
  43. for (i = 1; i < neg.size() && neg[i-1].second*neg[i].second >= 1; i += 2)
  44. sol[neg[i-1].first] = sol[neg[i].first] = 1,
  45. solu = 1;
  46. /// problema este ca cele doua for-uri de mai sus s-ar putea sa nu gaseasca nicio solutie.
  47. if (solu == 0)
  48. {
  49. if (poz.size() >= 1 && neg.size() >= 2)
  50. if (poz[0].second > neg[0].second * neg[1].second)
  51. sol[poz[0].first] = 1;
  52. else
  53. sol[neg[0].first] = sol[neg[1].first] = 1;
  54. if (poz.size() >= 1 && neg.size() <= 1)
  55. sol[poz[0].first] = 1;
  56. if (poz.size() == 0 && neg.size() >= 2)
  57. sol[neg[0].first] = sol[neg[1].first] = 1;
  58. if (poz.size() == 0 && neg.size() <= 1)
  59. if (nul != 0)
  60. sol[nul] = 1;
  61. else
  62. sol[neg[0].first] = 1;
  63. }
  64. for (i = 1; i <= n; ++i)
  65. fout << sol[i];
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement