Guest User

Untitled

a guest
Jan 27th, 2019
845
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. #pragma GCC optimize("Ofast")
  2. #pragma GCC target("avx,avx2,fma")
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <cmath>
  7.  
  8. int64_t solve(const int n, const int k, const std::vector<int>& arr) {
  9.     std::vector<int> rev(n);
  10.     for (int i = 0; i < n; ++i) {
  11.         rev[i] = arr[n-i-1];
  12.     }
  13.     int sum = 0;
  14.     const int len = k / 2;
  15.     std::vector<int> answ(n / 8);
  16.     int64_t res = 0;
  17.     for (int i = 0; i + k - 1 < n; ++i) {
  18.         const int j = n - (i + k - 1) - 1;
  19.         int begin = 0;
  20.         const int size = len / 8;
  21.         for (int id = 0; id < 8; ++id) {
  22.             for (int t = 0; t < size; ++t) {
  23.                 answ[t] += std::abs(arr[i + id * size + t] - rev[j + id * size + t]);
  24.             }
  25.             begin += size;
  26.         }
  27.         for (int t = begin; t < len; ++t) {
  28.             res += std::abs(arr[i+t] - rev[j+t]);
  29.             //std::cout << "abs(" << i + t << " - " << j + t << ") = " << std::abs(arr[i+t] - rev[j+t]) << std::endl;
  30.         }
  31.         for (int i = 0; i < (int)answ.size(); ++i) {
  32.             res += answ[i];
  33.             answ[i] = 0;
  34.         }
  35.         //std::cout << res << std::endl;
  36.     }
  37.     return res;
  38. }
  39.  
  40. int main() {
  41.     int n, k;
  42.     std::cin >> n >> k;
  43.     std::vector<int> arr(n);
  44.     for (auto &it : arr) { std::cin >> it; }
  45.     std::cout << solve(n, k, arr) << std::endl;
  46.     return 0;
  47. }
Add Comment
Please, Sign In to add comment