Advertisement
Helicator

speedrun.cpp

Jan 8th, 2022
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5. #define vi vector<int>
  6. #define ii pair<int,int>
  7. #define fi first
  8. #define sc second
  9. #define pb push_back
  10. #define stoi stoll
  11. #define popcnt __builtin_popcount
  12. #define getbit(x, k) ((x >> k) & 1)
  13. #define all(x) (x).begin(),(x).end()
  14. #define FOR(i,j,k) for(int i=j; i<k; ++i)
  15. #define look(a) cerr <<#a<<": "<<a<<endl;
  16. #define look2(a,b) cerr <<#a<<": "<<a<<" | "<<#b<<": "<<b<< endl;
  17.  
  18. string a[20];
  19. int l[20],r[20];
  20. int n,m,top = -1,ans = 1e18, s;
  21.  
  22. void scan()
  23. {
  24.     for (int i = 0; i < n; ++i){
  25.         for (int j = 0; j < m+2; ++j)
  26.             if (a[i][j] == '1'){
  27.                 r[i] = j;
  28.                 if (top == -1) top = i;
  29.             }
  30.         for (int j = m+1; j >= 0; --j)
  31.             if (a[i][j] == '1')
  32.                 l[i] = j;
  33.     }
  34. }
  35.  
  36. void dq(int i, int p)
  37. {
  38.     if (i == top) ans = min(ans,s);
  39.     else {
  40.         s += p + r[i-1] + 1;
  41.         dq(i-1,r[i-1]);
  42.         s -= p + r[i-1] + 1;
  43.         s += 2*(m+1) - p - l[i-1] + 1;
  44.         dq(i-1,l[i-1]);
  45.         s -= 2*(m+1) - p - l[i-1] + 1;
  46.     }
  47. }
  48.  
  49. void solve()
  50. {
  51.     cin >> n >> m;
  52.     FOR(i,0,n)
  53.         cin >> a[i];
  54.     FOR(i,0,n) l[i] = m+1;
  55.     scan();
  56.     if (top == -1){
  57.         cout << 0;
  58.         return;
  59.     }
  60.     s = r[n-1];
  61.     dq(n-1,r[n-1]);
  62.     cout << ans;
  63. }
  64.  
  65. signed main()
  66. {
  67.     cin.tie(0)->sync_with_stdio(0);
  68.     freopen("in", "r", stdin);
  69.     freopen("out", "w", stdout);
  70.     int T = 1;
  71.     // cin >> T;
  72.     while (T--) {
  73.         solve();
  74.         cout << '\n';
  75.     }
  76.     cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement