zoukankan      html  css  js  c++  java
  • C. Skier

    Skier rides on a snowy field. Its movements can be described by a string of characters 'S', 'N', 'W', 'E' (which correspond to 11 meter movement in the south, north, west or east direction respectively).

    It is known that if he moves along a previously unvisited segment of a path (i.e. this segment of the path is visited the first time), then the time of such movement is 55 seconds. If he rolls along previously visited segment of a path (i.e., this segment of the path has been covered by his path before), then it takes 11 second.

    Find the skier's time to roll all the path.

    Input

    The first line contains an integer tt (1t1041≤t≤104) — the number of test cases in the input. Then tt test cases follow.

    Each set is given by one nonempty string of the characters 'S', 'N', 'W', 'E'. The length of the string does not exceed 105105 characters.

    The sum of the lengths of tt given lines over all test cases in the input does not exceed 105105.

    Output

    For each test case, print the desired path time in seconds.

    Example
    input
    Copy
    5
    NNN
    NS
    WWEN
    WWEE
    NWNWS
    
    output
    Copy
    15
    6
    16
    12
    25
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <set>
    #include <queue>
    #include <map>
    #include <sstream>
    #include <cstdio>
    #include <cstring>
    #include <numeric>
    #include <cmath>
    #include <iomanip>
    #include <deque>
    #include <bitset>
    //#include <unordered_set>
    //#include <unordered_map>
    //#include <bits/stdc++.h>
    //#include <xfunctional>
    #define ll              long long
    #define PII             pair<int, int>
    #define rep(i,a,b)      for(int  i=a;i<=b;i++)
    #define dec(i,a,b)      for(int  i=a;i>=b;i--)
    #define pb              push_back
    #define mk              make_pair
    using namespace std;
    int dir[4][2] = { { 0,1 } ,{ 0,-1 },{ 1,0 },{ -1,0 } };
    const long long INF = 0x7f7f7f7f7f7f7f7f;
    const int inf = 0x3f3f3f3f;
    const double pi = 3.14159265358979323846;
    const int mod = 998244353;
    const int N = 2e5 + 5;
    //if(x<0 || x>=r || y<0 || y>=c)
    
    inline ll read()
    {
        ll x = 0; bool f = true; char c = getchar();
        while (c < '0' || c > '9') { if (c == '-') f = false; c = getchar(); }
        while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
        return f ? x : -x;
    }
    
    ll gcd(ll m, ll n)
    {
        return n == 0 ? m : gcd(n, m%n);
    }
    ll lcm(ll m, ll n)
    {
        return m*n / gcd(m, n);
    }
    
    int main()
    {
        int T;
        cin >> T;
        while (T--)
        {
            queue<char> q;
            string s;
            cin >> s;
            int res = 0;
            map<PII, set<PII>> mp;
            PII cur = { 0,0 };
            for (int i = 0; i < s.size(); i++)
            {
                PII t=cur;
                if (s[i] == 'N')
                    cur.second++;
                else if(s[i] == 'S')
                    cur.second--;
                else if (s[i] == 'E')
                    cur.first++;
                else if (s[i] == 'W')
                    cur.first--;
                if (mp[t].count(cur))
                {
                    res++;
                }
                else
                {
                    mp[t].insert(cur);
                    mp[cur].insert(t);
                    res += 5;
                }
            }
            cout << res << endl;
        }
        return 0;
    }
  • 相关阅读:
    LeetCode Fraction to Recurring Decimal
    LeetCode Excel Sheet Column Title
    LeetCode Majority Element
    LeetCode Reverse Nodes in k-Group
    LeetCode Recover Binary Search Tree
    一天一个设计模式(10)——装饰器模式
    一天一个设计模式(9)——组合模式
    一天一个设计模式(8)——过滤器模式
    一天一个设计模式(7)——桥接模式
    一天一个设计模式(6)——适配器模式
  • 原文地址:https://www.cnblogs.com/dealer/p/12955216.html
Copyright © 2011-2022 走看看