Guest User

Untitled

a guest
Apr 18th, 2020
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.70 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. // #include <ext/pb_ds/assoc_container.hpp>
  3. // #include <ext/pb_ds/tree_policy.hpp>
  4. using namespace std;
  5. // using namespace __gnu_pbds;
  6.  
  7. typedef     long long int    ll;
  8. typedef     long double      ld;
  9. typedef     pair<ll,ll>      pll;
  10. typedef     pair<int,int>    pii;
  11. #define     FOR(i,a,b)       for(ll i=a;i<b;i++)
  12. #define     FORE(i,a,b)      for(int i=a;i<=b;i++)  
  13. #define     FORD(i,b,a)      for(int i=b;i>a;i--)
  14. #define     FORDE(i,b,a)     for(ll i=b;i>=a;i--)
  15. #define     debug(x)         cout<< '>'<<#x<<" : "<<x<<"\n";
  16. #define     debug2(x,y)      cout<< '>'<<#x<<" : "<<x<<" | "; cout<< '>'<<#y<<" : "<<y<<"\n";
  17. #define     debug3(x,y,z)    cout<< '>'<<#x<<" : "<<x<<" | "; cout<< '>'<<#y<<" : "<<y<<" | ";cout<< '>'<<#z<<" : "<<z<<"\n";
  18. #define     umap             unordered_map
  19. #define     uset             unordered_set
  20. #define     lb               lower_bound
  21. #define     ub               upper_bound
  22. #define     mp               make_pair
  23. #define     in               insert
  24. #define     s                second
  25. #define     f                first
  26. #define     nn               cout<<"\n"
  27. #define     pb               push_back
  28. #define     testcase         int t;cin>>t;while(t--)
  29. #define     FastIO           ios_base::sync_with_stdio(false);cin.tie(NULL)
  30. #define     here             cout<<"I'm here\n";
  31. #define     ordered_set      tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
  32. #define     all(x)           (x).begin(),(x).end()
  33. #define     setcount(x)      __builtin_popcountll(x)
  34.  
  35. ll const mod=1000000000;
  36. ll const inf=2e18;
  37.  
  38. inline ll add(ll a,ll b) { return (a%mod + b%mod + mod)%mod; }
  39. inline ll mul(ll a,ll b) { return (a%mod * b%mod + mod)%mod; }
  40. inline ll sub(ll a,ll b) { return (a%mod - b%mod + mod)%mod; }
  41.  
  42. ll gcd(ll a,ll b){ if (b == 0) return a; return gcd(b, a % b); }
  43. ll modexp(ll x, ll n){ if(n==0){ return 1;} else if(n&1){ return (modexp((x*x)%mod, n/2)%mod * x%mod)%mod; } else{ return (modexp((x*x)%mod, n/2)%mod);} }
  44. ll modinv(ll n){ return modexp(n,mod-2); }
  45.  
  46. template<class T> void dispvector(vector<T> v){ for(ll i=0;i<v.size();i++) cout<<v[i]<<" "; nn; }
  47.  
  48. struct custom_hash {
  49.     static uint64_t splitmix64(uint64_t x) {
  50.         x += 0x9e3779b97f4a7c15;
  51.         x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
  52.         x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
  53.         return x ^ (x >> 31);
  54.     }
  55.     size_t operator()(uint64_t x) const {
  56.         static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
  57.         return splitmix64(x + FIXED_RANDOM);
  58.     }
  59. };
  60. // -------------------------------------------------------------------------------------------------
  61.  
  62. const ll maxN = 200000;
  63. ll x,y;
  64.  
  65.  
  66. // -------------------------------------------------------------------------------------------------
  67. pll rec(string str){
  68.     pll d;
  69.     d.f = 0;
  70.     d.s = 0;
  71.     FOR(i,0,str.size()){
  72.         if(str[i] == 'N'){
  73.             d.f--;
  74.         }else if(str[i] == 'S'){
  75.             d.f++;
  76.         }else if(str[i] == 'E'){
  77.            d.s++;
  78.         }else if(str[i] == 'W'){
  79.             d.s--;
  80.         }else{
  81.             ll k = str[i] -'0';
  82.             ll j = i+2;
  83.             ll o = 1;
  84.             ll c = 0;
  85.             while(j < str.size()){
  86.                 if(str[j] == '(') o++;
  87.                 else if(str[j] == ')') c++;
  88.                 if(o == c) break;
  89.                 j++;
  90.             }
  91.             j--;
  92.             pll d1 = rec(str.substr(i+2,j-i-2 + 1));
  93.             d.f += 1ll*k*d1.f;
  94.             d.s += 1ll*k*d1.s;
  95.             if(d.f >= mod){
  96.                 d.f%=mod;
  97.             }else if(d.f <= -1ll*mod){
  98.                 ll vv = abs(d.f);
  99.                 if(d.f >= mod) d.f%= mod;
  100.                 d.f = -1ll*d.f;
  101.             }
  102.             if(d.s >= mod){
  103.                 d.s%=mod;
  104.             }else if(d.s <= -1ll*mod){
  105.                 ll vv = abs(d.s);
  106.                 if(d.s >= mod) d.s%= mod;
  107.                 d.s = -1ll*d.s;
  108.             }
  109.             i = j+1;
  110.         }
  111.         if(d.f >= mod){
  112.                 d.f%=mod;
  113.             }else if(d.f <= -1ll*mod){
  114.                 ll vv = abs(d.f);
  115.                 if(d.f >= mod) d.f%= mod;
  116.                 d.f = -1ll*d.f;
  117.             }
  118.             if(d.s >= mod){
  119.                 d.s%=mod;
  120.             }else if(d.s <= -1ll*mod){
  121.                 ll vv = abs(d.s);
  122.                 if(d.s >= mod) d.s%= mod;
  123.                 d.s = -1ll*d.s;
  124.             }
  125.     }
  126.     if(d.f >= mod){
  127.         d.f%=mod;
  128.     }else if(d.f <= -1ll*mod){
  129.         ll vv = abs(d.f);
  130.         if(d.f >= mod) d.f%= mod;
  131.         d.f = -1ll*d.f;
  132.     }
  133.     if(d.s >= mod){
  134.         d.s%=mod;
  135.     }else if(d.s <= -1ll*mod){
  136.         ll vv = abs(d.s);
  137.         if(d.s >= mod) d.s%= mod;
  138.         d.s = -1ll*d.s;
  139.     }
  140.     return d;
  141. }
  142. void solve()
  143. {
  144.     string str;
  145.     cin >> str;
  146.     x = 1, y = 1;
  147.     pll tt = rec(str);
  148.     ll dx = tt.f;
  149.     ll dy = tt.s;
  150.     // debug2(dx,dy);
  151.     if(dx < 0){
  152.         dx = abs(dx);
  153.         dx %= mod;
  154.         if(x - dx < 1){
  155.             x = x - dx + mod;
  156.         }else x = x - dx;
  157.     }else{
  158.         dx %= mod;
  159.         if(x + dx > mod){
  160.             x = x + dx - mod;
  161.         }else x = x + dx;
  162.     }
  163.     if(dy < 0){
  164.         dy = abs(dy);
  165.         dy %= mod;
  166.         if(y - dy < 1){
  167.             y = y - dy + mod;
  168.         }else y = y - dy;
  169.     }else{
  170.         dy %= mod;
  171.         if(y + dy > mod){
  172.             y = y + dy - mod;
  173.         }else y = y + dy;
  174.     }
  175.     cout << y << " " << x << "\n";
  176. }
  177.  
  178. signed main(int argc, char** argv){
  179.     FastIO;
  180.     ll tc = 1;
  181.     testcase{
  182.         cout << "Case #" << tc << ": ";
  183.         tc++;
  184.         solve();
  185.    
  186.     }
  187.    
  188.     return 0;
  189. }
Add Comment
Please, Sign In to add comment