社区讨论

超时求助

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 条回复,欢迎继续交流。

正在加载回复...