社区讨论

40'

P14330 [JOI2021 预选赛 R2] 往返滑道 / Round Sugoroku参与者 2已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mhiyv7hc
此快照首次捕获于
2025/11/03 17:57
4 个月前
此快照最后确认于
2025/11/03 17:57
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll _N = 200000 + 1;
ll N, A, t = 0, s = 0, _l = 0, _r, l[_N], r[_N];
bool d = 0;
string S;
signed main(){
	ios::sync_with_stdio(0), cin.tie(), cout.tie();
	cin >> N >> A >> S;
	_r = N + 1, S = 'x' + S + 'x';
	l[0] = 0, r[N + 1] = N + 1;
	for (ll i = 1; i <= N; i++){
		l[i] = _l;
		if (S[i] == '#') s++, _l = i;
	}l[N + 1] = _l;
	for (ll i = N; i >= 1; i--){
		r[i] = _r;
		if (S[i] == '#') _r = i;
	}r[0] = _r;
	while (1){
		if (d) t += A - l[A], A = l[A]; else t += r[A] - A, A = r[A];
		if (S[A] == 'x') d = !d;
		else if (S[A] == '#'){
			r[l[A]] = r[A], l[r[A]] = l[A];
			S[A] = '.', d = !d, s--;
		}if (!s) break;
	}cout << t;
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...