fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e6;
  4. using ll = long long;
  5. ll a[maxn+5], b[maxn+5],n;
  6. ll dx[4] = {-1,0,1,0};
  7. ll dy[4] = {0,1,0,-1};
  8. ll x,y;
  9. string s;
  10. void process() {
  11. a[1] = 1;
  12. b[n] = n * n;
  13. for(int i = 2; i <= n; i++) {
  14. if(i%2==0) a[i] = a[i-1] + 1;
  15. else a[i] = a[i-1] + (i-1)*2;
  16. }
  17. for(int i = n - 1; i >= 1; i--) {
  18. if((n-i+1)%2==0) b[i] = b[i+1] - 1;
  19. else b[i] = b[i+1] - (n-i)*2;
  20. }
  21.  
  22. }
  23. ll getval(ll x, ll y) {
  24. if(x+y<=1+n){
  25. ll cot = x + y - 1;
  26. ll val;
  27. if(cot%2==0) val = a[cot]+abs(x-1);
  28. else val = a[cot]-abs(x-1);
  29. return val;
  30. }
  31. else {
  32. ll cot = x + y - n;
  33. ll val;
  34. if((n-cot+1)%2==0) val = b[cot]-abs(x-n);
  35. else val = b[cot]+abs(x-n);
  36. return val;
  37. }
  38. }
  39. void AC() {
  40. int m = s.size();
  41. set<ll> val;
  42. val.insert(getval(x,y));
  43. for(int i = 0; i < m; i++) {
  44. if(s[i]=='N') {x+=dx[0]; y+=dy[0];}
  45. else if(s[i] == 'E') {x+=dx[1]; y+=dy[1];}
  46. else if(s[i] == 'S') {x+=dx[2]; y+=dy[2];}
  47. else {x+=dx[3]; y+=dy[3];}
  48. val.insert(getval(x,y));
  49. }
  50. ll res = 0;
  51. for(auto it : val) res+=it;
  52. cout << '\n';
  53. cout << res;
  54. }
  55. int main() {
  56. ios::sync_with_stdio(false);
  57. cin.tie(nullptr);
  58. cin >> n >> x >> y;
  59. cin >> s;
  60. process();
  61. AC();
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0.01s 5568KB
stdin
Standard input is empty
stdout
-1