题面
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
代码抽象,多多包涵