Advertisement
Argent007

ФАС++ 02.10.23

Oct 2nd, 2023
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. // ConsoleApplication1.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <algorithm>
  7.  
  8. enum class ArrSortType {increasing, decreasing, nonincreasing, nondecreasing, constant, unsorted, empty};
  9.  
  10. template <typename T>
  11. ArrSortType array_sort_type(const std::vector<T>& seq)
  12. {
  13.     if (seq.size() == 0)
  14.         return ArrSortType::empty;
  15.     if (seq.size() == 1)
  16.         return ArrSortType::constant;
  17.     int inc = 0, dec = 0, eq = 0;
  18.     for (size_t i = 0; i < seq.size()-1; i++)
  19.     {
  20.         if (seq[i] < seq[i + 1])
  21.             ++inc;
  22.         else if (seq[i + 1] < seq[i])
  23.             ++dec;
  24.         else
  25.             ++eq;
  26.         if (dec > 0 && inc > 0)
  27.             return ArrSortType::unsorted;
  28.     }
  29.     if (inc == seq.size() - 1)
  30.         return ArrSortType::increasing;
  31.     if (dec == seq.size() - 1)
  32.         return ArrSortType::decreasing;
  33.     if (eq == seq.size() - 1)
  34.         return ArrSortType::constant;
  35.     if (dec == 0)
  36.         return ArrSortType::nondecreasing;
  37.     if (inc == 0)
  38.         return ArrSortType::nonincreasing;
  39.     return ArrSortType::unsorted;
  40. }
  41.  
  42. template <typename T>
  43. bool permutated_arrays(const std::vector<T>& seq1, const std::vector<T>& seq2)
  44. {
  45.     if (seq1.size() != seq2.size())
  46.         return false;
  47.     for (size_t i = 0; i < seq1.size(); i++)
  48.     {
  49.         if (std::count(begin(seq1), end(seq1), seq1[i]) !=
  50.             std::count(begin(seq2), end(seq2), seq1[i]))
  51.             return false;
  52.     }
  53.     return true;
  54. }
  55.  
  56. //проверяет последовательности на перестановочность, меняя сами последовательности на отсортированные
  57. template <typename T>
  58. bool permutated_arrays(T* seq1, T* seq2, size_t size)
  59. {
  60.     if (size == 0)
  61.         return true;
  62.     if (seq1 == nullptr || seq2 == nullptr)
  63.         return false;
  64.     std::sort(seq1, seq1 + size);
  65.     std::sort(seq2, seq2 + size);
  66.     return std::equal(seq1, seq1 + size, seq2, seq2 + size);
  67. }
  68.  
  69. struct rectangle
  70. {
  71.     double x1, y1;
  72.     double x2, y2;
  73. };
  74.  
  75. struct segment
  76. {
  77.     double a, b;
  78. };
  79.  
  80. //находит длину объединения отрезков
  81. double segments_union_length(std::vector<segment>& s)
  82. {
  83.     res = 0.0;
  84.     return res;
  85. }
  86.  
  87. double rectangles_union_area(const std::vector<rectangle>& rect)
  88. {
  89.     if (rect.size() == 0)
  90.         return 0.0;
  91.     std::vector<double> x;
  92.     for (const auto& r : rect)
  93.     {
  94.         x.push_back(r.x1);
  95.         x.push_back(r.x2);
  96.     }
  97.     std::sort(begin(x), end(x));
  98.     x.erase(std::unique(begin(x), end(x)), end(x));
  99.     double res = 0.0;
  100.     for (size_t i = 0; i < x.size()-1; i++)
  101.     {
  102.         std::vector<segment> s;
  103.         for (const auto& r : rect)
  104.             if (std::min(r.x1, r.x2) <= x[i] && x[i + 1] <= std::max(r.x1, r.x2))
  105.                 s.push_back({ r.y1,r.y2 });
  106.         res += (x[i + 1] - x[i]) * segments_union_length(s);
  107.     }
  108.     return res;
  109. }
  110.  
  111. double rectangles_union_area_v2(const std::vector<rectangle>& rect)
  112. {
  113.     if (rect.size() == 0)
  114.         return 0.0;
  115.     std::vector<double> x,y;
  116.     for (const auto& r : rect)
  117.     {
  118.         x.push_back(r.x1);
  119.         x.push_back(r.x2);
  120.         y.push_back(r.y1);
  121.         y.push_back(r.y2);
  122.     }
  123.     std::sort(begin(x), end(x));
  124.     x.erase(std::unique(begin(x), end(x)), end(x));
  125.     std::sort(begin(y), end(y));
  126.     y.erase(std::unique(begin(y), end(y)), end(y));
  127.  
  128.     double res = 0.0;
  129.     for (size_t i = 0; i < x.size() - 1; i++)
  130.     {
  131.         for (size_t j = 0; j < y.size()-1; j++)
  132.         {
  133.             double a = (x[i] + x[i + 1]) / 2;
  134.             double b = (y[i] + y[i + 1]) / 2;
  135.             for (const auto& r : rect)
  136.             {
  137.                 if (std::min(r.x1, r.x2) < a && a < std::max(r.x1, r.x2) < a
  138.                     && std::min(r.y1, r.y2) < b && b < std::max(r.x1, r.x2))
  139.                 {
  140.                     res += (x[i + 1] - x[i]) * (y[j + 1] - y[j]);
  141.                     break;
  142.                 }
  143.             }
  144.         }
  145.     }
  146.     return res;
  147. }
  148.  
  149.  
  150. int main()
  151. {
  152.     int a[] = { 1,0,2,9,3,8,4,7,5,6 };
  153.     int b[] = { 0,9,8,7,6,5,4,3,2,1 };
  154.     std::cout << permutated_arrays(a, b, 10) << std::endl;
  155.     std::cout << "Hello World!\n";
  156. }
  157.  
  158. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  159. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  160.  
  161. // Советы по началу работы
  162. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  163. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  164. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  165. //   4. В окне "Список ошибок" можно просматривать ошибки.
  166. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  167. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
  168.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement