Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- // #include <ext/pb_ds/assoc_container.hpp>
- // #include <ext/pb_ds/tree_policy.hpp>
- using namespace std;
- // using namespace __gnu_pbds;
- typedef long long int ll;
- typedef long double ld;
- typedef pair<ll,ll> pll;
- typedef pair<int,int> pii;
- #define FOR(i,a,b) for(ll i=a;i<b;i++)
- #define FORE(i,a,b) for(int i=a;i<=b;i++)
- #define FORD(i,b,a) for(int i=b;i>a;i--)
- #define FORDE(i,b,a) for(ll i=b;i>=a;i--)
- #define debug(x) cout<< '>'<<#x<<" : "<<x<<"\n";
- #define debug2(x,y) cout<< '>'<<#x<<" : "<<x<<" | "; cout<< '>'<<#y<<" : "<<y<<"\n";
- #define debug3(x,y,z) cout<< '>'<<#x<<" : "<<x<<" | "; cout<< '>'<<#y<<" : "<<y<<" | ";cout<< '>'<<#z<<" : "<<z<<"\n";
- #define umap unordered_map
- #define uset unordered_set
- #define lb lower_bound
- #define ub upper_bound
- #define mp make_pair
- #define in insert
- #define s second
- #define f first
- #define nn cout<<"\n"
- #define pb push_back
- #define testcase int t;cin>>t;while(t--)
- #define FastIO ios_base::sync_with_stdio(false);cin.tie(NULL)
- #define here cout<<"I'm here\n";
- #define ordered_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
- #define all(x) (x).begin(),(x).end()
- #define setcount(x) __builtin_popcountll(x)
- ll const mod=1000000000;
- ll const inf=2e18;
- inline ll add(ll a,ll b) { return (a%mod + b%mod + mod)%mod; }
- inline ll mul(ll a,ll b) { return (a%mod * b%mod + mod)%mod; }
- inline ll sub(ll a,ll b) { return (a%mod - b%mod + mod)%mod; }
- ll gcd(ll a,ll b){ if (b == 0) return a; return gcd(b, a % b); }
- 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);} }
- ll modinv(ll n){ return modexp(n,mod-2); }
- template<class T> void dispvector(vector<T> v){ for(ll i=0;i<v.size();i++) cout<<v[i]<<" "; nn; }
- struct custom_hash {
- static uint64_t splitmix64(uint64_t x) {
- x += 0x9e3779b97f4a7c15;
- x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
- x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
- return x ^ (x >> 31);
- }
- size_t operator()(uint64_t x) const {
- static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
- return splitmix64(x + FIXED_RANDOM);
- }
- };
- // -------------------------------------------------------------------------------------------------
- const ll maxN = 200000;
- ll x,y;
- // -------------------------------------------------------------------------------------------------
- pll rec(string str){
- pll d;
- d.f = 0;
- d.s = 0;
- FOR(i,0,str.size()){
- if(str[i] == 'N'){
- d.f--;
- }else if(str[i] == 'S'){
- d.f++;
- }else if(str[i] == 'E'){
- d.s++;
- }else if(str[i] == 'W'){
- d.s--;
- }else{
- ll k = str[i] -'0';
- ll j = i+2;
- ll o = 1;
- ll c = 0;
- while(j < str.size()){
- if(str[j] == '(') o++;
- else if(str[j] == ')') c++;
- if(o == c) break;
- j++;
- }
- j--;
- pll d1 = rec(str.substr(i+2,j-i-2 + 1));
- d.f += 1ll*k*d1.f;
- d.s += 1ll*k*d1.s;
- if(d.f >= mod){
- d.f%=mod;
- }else if(d.f <= -1ll*mod){
- ll vv = abs(d.f);
- if(d.f >= mod) d.f%= mod;
- d.f = -1ll*d.f;
- }
- if(d.s >= mod){
- d.s%=mod;
- }else if(d.s <= -1ll*mod){
- ll vv = abs(d.s);
- if(d.s >= mod) d.s%= mod;
- d.s = -1ll*d.s;
- }
- i = j+1;
- }
- if(d.f >= mod){
- d.f%=mod;
- }else if(d.f <= -1ll*mod){
- ll vv = abs(d.f);
- if(d.f >= mod) d.f%= mod;
- d.f = -1ll*d.f;
- }
- if(d.s >= mod){
- d.s%=mod;
- }else if(d.s <= -1ll*mod){
- ll vv = abs(d.s);
- if(d.s >= mod) d.s%= mod;
- d.s = -1ll*d.s;
- }
- }
- if(d.f >= mod){
- d.f%=mod;
- }else if(d.f <= -1ll*mod){
- ll vv = abs(d.f);
- if(d.f >= mod) d.f%= mod;
- d.f = -1ll*d.f;
- }
- if(d.s >= mod){
- d.s%=mod;
- }else if(d.s <= -1ll*mod){
- ll vv = abs(d.s);
- if(d.s >= mod) d.s%= mod;
- d.s = -1ll*d.s;
- }
- return d;
- }
- void solve()
- {
- string str;
- cin >> str;
- x = 1, y = 1;
- pll tt = rec(str);
- ll dx = tt.f;
- ll dy = tt.s;
- // debug2(dx,dy);
- if(dx < 0){
- dx = abs(dx);
- dx %= mod;
- if(x - dx < 1){
- x = x - dx + mod;
- }else x = x - dx;
- }else{
- dx %= mod;
- if(x + dx > mod){
- x = x + dx - mod;
- }else x = x + dx;
- }
- if(dy < 0){
- dy = abs(dy);
- dy %= mod;
- if(y - dy < 1){
- y = y - dy + mod;
- }else y = y - dy;
- }else{
- dy %= mod;
- if(y + dy > mod){
- y = y + dy - mod;
- }else y = y + dy;
- }
- cout << y << " " << x << "\n";
- }
- signed main(int argc, char** argv){
- FastIO;
- ll tc = 1;
- testcase{
- cout << "Case #" << tc << ": ";
- tc++;
- solve();
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment