为!什!么!40!分!

题面

1. 小信下棋

题目ID:7342 必做题100分

最新提交:

Wrong Answer

40 分

历史最高:

Wrong Answer

40 分

时间限制: 1000ms

空间限制: 262144kB

题目描述

时间:1s 空间:256M

题目描述:

小友给了小信一个长度为n的只包含"L"和 的"R"字符串移动序列S。

对应的,小信有一个1×n的棋盘,一开始每个格子上都放着一颗棋子。

每一轮移动,每个格子上的棋子按照它当前位置对应移动序列的字母来决定向左还是向右移动,“L”则向左移动一格,“R”则向右移动一格。

请输出经过 10^{100} 轮移动后每个格子上棋子的个数。

输入格式:

第一行包含一个字符串S。

输出格式:

输出一行n个整数,表示经过 10^{100} 轮移动后每个格子上棋子的个数。

样例1输入:

RRLRL

样例1输出:

0 1 2 1 1

样例2输入:

RRRLLRLLRRRLLLLL

样例2输出:

0 0 3 2 0 2 1 0 0 0 4 4 0 0 0 0

约定:

对于100%的数据, 2 ≤ S ≤ 105 。保证S开头为 ”R“ ,末尾为“L”。

代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

signed main(void)
{
    string S;
    cin >> S;

    int n = S.size();
    
    vector<int> chess(n+1, 1);
	vector<int> now_chess(n+1, 0);

    for (int i = 0; i < 100; i++) {
    	fill(now_chess.begin(), now_chess.end(), 0); 
		//动态数组的初始化写法,功能像memset 
        for (int j = 0; j < n; j++) {
            if (chess[j] > 0) {
                if (S[j] == 'R' && j < n - 1) {
                    now_chess[j + 1] += chess[j];
                }
				else if (S[j] == 'L' && j > 0) {
                    now_chess[j - 1] += chess[j];
                }
            }
        }

        chess = now_chess;
    }

    for (int i = 0; i < n; i++) {
        cout << chess[i] << ' ';
    }

    return 0;
}

dalao救我!QwQ

代码抽象,多多包涵

两天了,还需要讲解吗?

1 个赞

嗯嗯嗯( :3 )

你啥时候回复我私信