萌新刚学OI,莫名出锅求救
查看原帖
萌新刚学OI,莫名出锅求救
39863
引领天下魔酸楼主2020/8/24 23:24

思路是分类讨论。

#include<bits/stdc++.h>
using namespace std;
int n;
string s;
double ans;
const double pi=3.1415926535897932384626433832795028841971693993751;
int main(){
	cin>>n>>s;
	if(n==1){
		switch(s[0]){
			case 'T':puts("3");break;
			case 'S':puts("4");break;
			default:puts("3.1415926535897932384626433832795028841971693993751");
		}
		return 0;
	}
	register int i=1;
	for(;i<n;i++)if(s[i]!='T')break;
	if(s[0]=='T'){
		ans+=1;
		if(i!=n){
			if(s[i]=='S')ans+=i+1+1+sqrt((i-0.5)*(i-0.5)+(1-sqrt(0.75))*(1-sqrt(0.75)));
			else ans+=i+0.5+sqrt(i*i+(1-sqrt(0.75))*(1-sqrt(0.75)));
			if(s[n-1]=='S'){
				if(s[i]=='S')ans+=((n-i-1)<<1)+1;
				else ans+=((n-i)<<1);
			}else if(s[n-1]=='C'){
				ans+=pi/2;
				if(s[i]=='S')ans+=((n-1-i)<<1)-1;
				else ans+=((n-i-1)<<1);
			}else{
				for(i=n-1;i>=0;i--)if(s[i]!='T')break;
				if(s[i]=='S')ans+=n-i+sqrt((n-i-1)*(n-i-1)+(1-sqrt(0.75))*(1-sqrt(0.75)));
				else ans+=n-i+0.5+sqrt((n-i+0.5)*(n-i+0.5)+(1-sqrt(0.75))*(1-sqrt(0.75)));
			}
		}else ans+=n<<1;
		printf("%.12lf",ans);
		return 0;
	}else if(s[0]=='S'){
		ans=3;
		if(s[n-1]=='S')return !printf("%d",(n+1)<<1);
		else if(s[n-1]=='C')return !printf("%.12lf",(n<<1)+pi/2);
		else{
			i=n-1;
			for(;i;i--)if(s[i]!='T')break;
			if(s[i]=='C')ans+=(i-0.5)*2+sqrt((n-i-1)*(n-i-1)+(1-sqrt(0.75))*(1-sqrt(0.75)))+n-1-(i-0.5)+1;
			else ans+=2*i+sqrt((n-i-1.5)*(n-i-1.5)+(1-sqrt(0.75))*(1-sqrt(0.75)))+1;
		}
		printf("%.12lf",ans);
		return 0;
	}else if(s[0]=='C'){
		if(s[n-1]=='S')return !printf("%.12lf",(n<<1)+pi/2);
		else if(s[n-1]=='C')return !printf("%.12lf",((n-1)<<1)+pi);
		else{
			i=n-1;
			for(;i;i--)if(s[i]!='T')break;
			if(s[i]=='C')ans+=sqrt((n-i-1)*(n-i-1)+(1-sqrt(0.75))*(1-sqrt(0.75)))+n-i+1+1;
			else ans+=2+i+sqrt((n-i-1)*(n-i-1)+(1-sqrt(0.75))*(1-sqrt(0.75)))+n;
		}
		printf("%.12lf",ans);
		return 0;
	}
	return 0;
}

爆成52pts求救

2020/8/24 23:24
加载中...