Codeforces Round #753 (Div. 3) 题解

E. Robot on the Board 1

题目大意:给你一个字符串,由"UDLR"组成,"UDLR"表示方向。你有一个n*m的方格,请你找到一个起点,使得这个起点按照给定的字符串进行移动,在走出棋盘(或者执行所有步数)前执行最多的步数。
解题思路:先将起点定在(1,1),当你要走出棋盘的时候,看看能不能通过平移棋盘解决这个问题。同时你也需要记录当前到达的最大x和y,在平移棋盘时最大的x和y不能超过n和m。

#include <iostream>
#include <string>
using namespace std;

int n, m, x, y, nx, ny, maxx, maxy;
string str;
void work() {
    cin >> n >> m;
    cin >> str;
    x = nx = maxx = 1;
    y = ny = maxy = 1;
    for(int i = 0; i < str.size(); i++) {
        if (str[i] == 'U') {
            if (nx > 1) nx--;
            else {
                if (x == n || maxx == n) return ;
                x++, maxx++;
            }
        }
        if (str[i] == 'D') {
            if (nx < n) nx++;
            else return ;
        }
        if (str[i] == 'L') {
            if (ny > 1) ny--;
            else {
                if (y == m || maxy == m) return ;
                y++, maxy++;
            }
        }
        if (str[i] == 'R') {
            if (ny < m) ny++;
            else return ;
        }
        maxx = max(nx, maxx);
        maxy = max(ny, maxy);
    }
}

int main()
{
    int T;
    cin >> T;
    while(T--) {
        work();
        cout << x << ' ' << y << endl;
    }
    return 0;
}

G. Banquet Preparations 1

题目大意:
解题思路:

上一篇:完美矩形(C++)


下一篇:洛谷 P3072 [USACO13FEB]Perimeter S(dfs)