makrusak

Spiral

Sep 30th, 2012
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <string>
  6. #include <queue>
  7. #include <map>
  8. #include <set>
  9. #include <cmath>
  10. #include <sstream>
  11. #include <stack>
  12. #include <cassert>
  13.  
  14. #define pb push_back
  15. #define mp make_pair
  16. #define PI 3.1415926535897932384626433832795
  17. #define sqr(x) (x)*(x)
  18. #define forn(i, n) for(int i = 0; i < n; ++i)
  19. #define ALL(x) x.begin(), x.end()
  20. #define F first
  21. #define S second
  22. #define m0(x) memset(x,0,sizeof(x))
  23. #define CC(x) cout << (x) << "\n"
  24. #define pw(x) (1ull<<(x)).
  25.  
  26. using namespace std;
  27. typedef long long ll;
  28. typedef unsigned long long ull;
  29. typedef long double ld;
  30. typedef pair<int,int> pii;
  31. const int INF = 2147483647;
  32. const ll LLINF = 9223372036854775807LL;
  33.  
  34. ll m,n,i,j;
  35.  
  36. ll length(ll x) {
  37.   return 2*m+2*n-8*(x-1)-4;
  38. }
  39.  
  40. int main() {
  41.   freopen("spiral.in", "r", stdin);
  42.   freopen("spiral.out", "w", stdout);
  43.  
  44.   cin >> m >> n >> i >> j;
  45.   ll level = min(min(i,j), min(m-i+1,n-j+1));
  46.   ll first=(length(1)+length(level-1))*(level-1)/2+1;
  47.   ll second=first+(m-2*(level-1))-1;
  48.   ll third=second+(n-2*(level-1))-1;
  49.   ll fourth=third+(m-2*(level-1))-1;
  50.   if (j==level) CC(first+i-level);
  51.   else if (m-i+1==level) CC(second+j-level);
  52.   else if (n-j+1==level) CC(third+(m-i-level+1));
  53.   else if (i==level) CC(fourth+(n-j-level+1));
  54.   return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment