8VC 벤 처 컵 2016-A 라운드 제거 로봇 시퀀스 폭력

A. Robot Sequence
제목 연결:
http://www.codeforces.com/contest/626/problem/A
Description
Calvin the robot lies in an infinite rectangular grid. Calvin's source code contains a list of n commands, each either 'U', 'R', 'D', or 'L' — instructions to move a single square up, right, down, or left, respectively. How many ways can Calvin execute a non-empty contiguous substrings of commands and return to the same square he starts in? Two substrings are considered different if they have different starting or ending indices.
Input
The first line of the input contains a single positive integer, n (1 ≤ n ≤ 200) — the number of commands.
The next line contains n characters, each either 'U', 'R', 'D', or 'L' — Calvin's source code.
Output
Print a single integer — the number of contiguous substrings that Calvin can execute and return to his starting square.
Sample Input
6 URLLDR
Sample Output
2
Hint
제목
명령 을 내 린 다음 이 명령 에 몇 개의 하위 문자열 의 시작 점 과 끝 이 같 습 니까?
문제 풀이:
데이터 범위 가 200 밖 에 안 되 니까 그냥 n^2 폭력 이면 돼 요.
접두사 와
사실 접두사 와 n^3 을 기록 하지 않 는 것 도 도자기 입 니 다.
코드
#include<bits/stdc++.h>
using namespace std;

const int maxn = 503;
char s[maxn];
int x[maxn],y[maxn];

int main()
{
    int n;
    scanf("%d",&n);
    scanf("%s",s+1);
    for(int i=1;i<=n;i++)
    {
        x[i]=x[i-1];
        y[i]=y[i-1];
        if(s[i]=='U')x[i]++;
        if(s[i]=='D')x[i]--;
        if(s[i]=='L')y[i]++;
        if(s[i]=='R')y[i]--;
    }
    int ans = 0;
    for(int i=0;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            if(x[i]-x[j]==0&&y[i]-y[j]==0)
                ans++;
    cout<<ans<<endl;
}

좋은 웹페이지 즐겨찾기