AT_ddcc2019_final_a题解
传送门:AT_ddcc2019_final_a
切入正题
思路
这道题其实就是一道大模拟再加一丢丢贪心。
通过一个雪方块的时间为
其实不难发现,如果想要在把
所以,我们可以先计算出来最长的连续的冰方块数量,以及再改变前的所需的时间,然后就可以得出在更改之后最少时间为:
现在所需时间减
代码
#include<bits/stdc++.h>
using namespace std;
double n,cnt,cnt2,k,ans;//n为总方块数量,cnt为统计连续冰方块数,cnt2为最长连续冰方块数,k为计算现在所需时间的统计值,ans为最终答案
char a[100005];//开一个字符类型数组a存储滑雪道
int main() {
std::ios::sync_with_stdio(false);//关闭cin,cout同步流,可提速,萌新初学者可忽略
cin>>n;//输入总方块数
//计算最长连续冰方块数
for(int i=1;i<=n;i++){//循环输入冰雪方块
cin>>a[i];//输入冰雪方块
if(a[i]=='>'){
cnt++;//统计当前连续冰方块数量
cnt2=max(cnt2,cnt);//不断更新最长连续冰方块数
}
else cnt=0;//如果当前方块不为冰方块('>')时,停止统计。
}
//计算现在所需时间
for(int i=1;i<=n;i++){
if(a[i]=='>'){
ans+=1/(k+2);//增加通过当前冰方块所需时间
k++;//增加联通冰块值
}
else{
k=0;//如果当前方块不为冰方块('>')时,停止统计。
ans++; //增加通过当前雪方块时间
}
}
cout<<setprecision(15)<<ans-1+1/(cnt2+2);//输出最后答案
return 0;
}
//问题解决~~
AC记录