社区讨论
超时求助
CF11EForward, march!参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo1nkcrt
- 此快照首次捕获于
- 2023/10/22 23:57 2 年前
- 此快照最后确认于
- 2023/11/03 00:40 2 年前
理论上来说可以过的啊?
CPP#include <bits/stdc++.h>//喵内~
#define re register//喵内~
#define int long long
using namespace std;//喵内~
typedef long long ll;
typedef long double ld;
const int N = 2e6 + 5;//喵内~要填数字哟~
inline int read(){
int s = 0,f = 1;char c = getchar();
while (!isdigit(c)){if (c == '-')f = -1;c = getchar();}
while (isdigit(c)){s = (s<<3) + (s<<1) + (c ^ 48);c = getchar();}
return s * f;
}//喵内~
char s[N],str[N];
int n;
ld dp[N][2];
bool check(ld mid){
dp[0][0] = -mid;//相当于在前面加了一个x
dp[0][1] = 0;
for (int i=1;i<=n;i++){
dp[i][0] = dp[i-1][1] + (str[i] == 'L') - mid;
dp[i][1] = dp[i-1][0] + (str[i] == 'R') - mid;
dp[i][0] = max(dp[i][0],dp[i][1] - mid);
dp[i][1] = max(dp[i][1],dp[i][0] - mid);
}
return dp[n][1] >= 0;
}
signed main(){
cin >> s;
int len = strlen(s);
if (s[0] == 'R' && s[len - 1] == 'R')
str[++n] = 'X';
str[++n] = s[0];
for (int i=1;i<len;i++){
if (s[i] == s[i-1])
str[++n] = 'X';
str[++n] = s[i];
}
if (s[0] == 'L' && s[len - 1] == 'L')
str[++n] = 'X';
ld l = 0,r = 100;
while (r - l > 1e-7){
ld mid = (l + r) / 2.0;
if (check(mid / 100.0))
l = mid;
else r = mid;
}
printf("%.6Lf",l);
return 0;
}//喵内~
/*
*/
回复
共 1 条回复,欢迎继续交流。
正在加载回复...