Guest User

1440.cpp

a guest
Jun 14th, 2018
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <vector>
  3. #include <string>
  4. #include <functional>
  5. #include <cassert>
  6. #include <cstdlib>
  7.  
  8. std::string solve(const std::vector<int>& a) {
  9.     const int n = a.size();
  10.     int sum = 0;
  11.     for (auto& it : a) {
  12.         assert(it >= 0);
  13.         sum += it;
  14.     }
  15.     assert(0 <= sum && sum <= 1e9);
  16.     if (sum == 0) {
  17.         return std::string(n, '1');
  18.     }
  19.     std::function<bool(int, int)> is_possible = [&](int number, const int dir) {
  20.         const int need_sum = sum / number;
  21.         assert(need_sum * number == sum);
  22.         int curr_sum = 0, i = 0;
  23.         do {
  24.             curr_sum += a[i];
  25.             if (curr_sum > need_sum) {
  26.                 return false;
  27.             } else if (curr_sum == need_sum) {
  28.                 --number;
  29.                 curr_sum = 0;
  30.             }
  31.             i += dir;
  32.             if (i < 0) {
  33.                 i += n;
  34.             }
  35.             if (i >= n) {
  36.                 i -= n;
  37.             }
  38.         } while (number && i != 0);
  39.         assert(curr_sum == 0);
  40.         return true;
  41.     };
  42.      
  43.     std::string answ(n, '0');
  44.      
  45.     for (int i = 1; i * i <= sum; ++i) {
  46.         const int j = sum / i;
  47.         if (j * i == sum) {
  48.             if (i <= n) {
  49.                 answ[i-1] += (is_possible(i, 1) || is_possible(i, -1));
  50.             }
  51.             if (j <= n && j != i) {
  52.                 answ[j-1] += (is_possible(j, 1) || is_possible(j, -1));
  53.             }
  54.         }
  55.     }
  56.     return answ;
  57. }
  58.  
  59. int main() {
  60.     int n;
  61.     scanf("%d", &n);
  62.     std::vector<int> a(n);
  63.     for (auto& it : a) {
  64.         scanf("%d", &it);
  65.     }
  66.     printf("%s\n", solve(a).c_str());
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment