题目传送门
标程1(osu简单版)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3e5+9;
int n;
double len;
char p[N];
long double da[N];
int main()
{
cin>>n;
for (int i=1;i<=n;i++){
cin>>p[i];
}
for (int i=1;i<=n;i++){
if (p[i]=='x'){
da[i]=da[i-1];
len=0;
}
else if (p[i]=='o'){
da[i]=da[i-1]+2*len+1;
len++;
}
else{
da[i]=da[i-1]+len+0.5;
len=(len+1)/2;
// cout<<len<<" "<<da[i]<<"\n";
}
}
printf("%.4Lf",da[n]);
return 0;
}
标程2(osu!!)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
int n;
double p[N],x1[N],x2[N],x3[N],da[N];
int main()
{
cin>>n;
for (int i=1;i<=n;i++){
cin>>p[i];
}
for (int i=1;i<=n;i++){
x1[i]=(x1[i-1]+1)*p[i];
x2[i]=(x2[i-1]+2*x1[i-1]+1)*p[i];
// x3[i]=(x3[i-1]+3*x1[i-1]+1)*p[i];
da[i]=da[i-1]+(3*x2[i-1]+3*x1[i-1]+1)*p[i];
}
printf("%.1lf\n",da[n]);
return 0;
}
水完了芜湖