Advertisement
artemgf

Кодовое слово

Jun 16th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.05 KB | None | 0 0
  1. #pragma once
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #define _USE_MATH_DEFINES
  4. #include <iostream>
  5. #include <string>
  6. #include <map>
  7. #include <set>
  8. #include <algorithm>
  9. #include <vector>
  10. #include <stdio.h>
  11. #include <cmath>
  12. #include <math.h>
  13. #include <queue>
  14. #include <stack>
  15. #include <climits>
  16. #include <deque>
  17. #include <ctime>
  18. #include <iomanip>
  19. #include <bitset>
  20. #include <unordered_map>
  21. #include <unordered_set>
  22.  
  23. using namespace std;
  24.  
  25. typedef long long ll;
  26. typedef unsigned long long ull;
  27. typedef unsigned int ui;
  28.  
  29. #define mh() make_heap()
  30. #define poph() pop_heap()
  31. #define pushh() push_heap()
  32. #define sor(n) n.begin(), n.end()
  33. #define rsor(n) n.rbegin(), n.rend()
  34. #define mp make_pair
  35. #define files freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout)
  36. #define p(T) pair<T,T>
  37. #define toch(x) cout.precision(x), cout.setf(ios::fixed)
  38. #define znac(l) abs(l)/l
  39. #define IOS ios::sync_with_stdio(false)
  40. #define IOSB cin.tie(0), cout.tie(0);
  41. const ll ok = ll(1e9 + 7);
  42.  
  43. int main()
  44. {
  45.     IOSB;
  46.     IOS;
  47. #ifdef TheCompiler
  48.     files;
  49. #endif
  50.     ll n;
  51.     cin >> n;
  52.     string s;
  53.     while (cin >> s)
  54.     {
  55.         if (s.size() == n)
  56.         {
  57.             ll sum = 0;
  58.             for (int i = 0; i < s.size(); i++)
  59.             {
  60.                 if (s[i] == '1')
  61.                 {
  62.                     sum += i + 1;
  63.                 }
  64.             }
  65.             if (sum % (n + 1) == 0)
  66.             {
  67.                 cout << s << endl;
  68.             }
  69.             else
  70.             {
  71.                 s[sum % (n + 1) - 1] = '0';
  72.                 cout << s << endl;
  73.             }
  74.         }
  75.         else
  76.         {
  77.             vector<p(ll)>prev;
  78.             ll sum = 0;
  79.             ll sc = 0;
  80.             for (int i = 0; i < s.size(); i++)
  81.             {
  82.                 if (s[i] == '1')
  83.                 {
  84.                     sc++;
  85.                     sum += i + 1;
  86.                 }
  87.                 prev.push_back({ sc,sum });
  88.             }
  89.             if (s.size() > n)
  90.             {
  91.                 for (int i = 0; i < s.size(); i++)
  92.                 {
  93.                     sum = 0;
  94.                     if (i != 0)
  95.                     sum = prev[i - 1].second;
  96.                     sum += prev[n].second - prev[i].second - (prev[n].first - prev[i].first);
  97.                     if (sum % (n + 1) == 0)
  98.                     {
  99.                         s.erase(i,1);
  100.                         break;
  101.                     }
  102.                 }
  103.                 cout << s << endl;
  104.             }
  105.             else
  106.             {
  107.                 string h = "";
  108.                 if ((prev[n - 2].second + prev[n - 2].first + 1) % (n + 1) == 0)
  109.                 {
  110.                     cout << "1" << s << endl;
  111.                     continue;
  112.                 }
  113.                 if ((prev[n - 2].second + prev[n - 2].first) % (n + 1) == 0)
  114.                 {
  115.                     cout << "0" << s << endl;
  116.                     continue;
  117.                 }
  118.                 if ((prev[n - 2].second + n) % (n + 1) == 0)
  119.                 {
  120.                     cout << s << "1" << endl;
  121.                     continue;
  122.                 }
  123.                 if ((prev[n - 2].second) % (n + 1) == 0)
  124.                 {
  125.                     cout << s << "0" << endl;
  126.                     continue;
  127.                 }
  128.                 h = s[0];
  129.                 for (int i = 1; i < s.size(); i++)
  130.                 {
  131.                     sum = 0;
  132.                     sum = prev[i - 1].second;
  133.                     sum += prev[n - 2].second - prev[i-1].second + (prev[n - 2].first - prev[i-1].first);
  134.                     if ((sum+i+1) % (n + 1) == 0)
  135.                     {
  136.                         h += "1";
  137.                         while (i < s.size())
  138.                         {
  139.                             h += s[i];
  140.                             i++;
  141.                         }
  142.                         break;
  143.                     }
  144.                     else
  145.                         if (sum % (n + 1) == 0)
  146.                         {
  147.                             h += "0";
  148.                             while (i < s.size())
  149.                             {
  150.                                 h += s[i];
  151.                                 i++;
  152.                             }
  153.                             break;
  154.                         }
  155.                     h += s[i];
  156.                 }
  157.                 cout << h << endl;
  158.             }
  159.         }
  160.     }
  161.     return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement