思路: 简单模拟下。从左向右扫描一次,求出挖出该区间空地的花费,并取个最小值即可。

  至于怎么求区间内的高度最小值,就用线段树就好了。

#include <bits/stdc++.h>
#define PB push_back
#define MP make_pair
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
#define PI acos((double)-1)
#define E exp(double(1))
#define K 1000000+9
struct node1
{
int h,kind;
}mp[K];
int n,m;
char ss[K];
struct node
{
int mi;
int left,right;
}tree[*K];
int build(int id,int l,int r)
{
tree[id].left=l;tree[id].right=r;
if(l==r)
tree[id].mi=mp[l].h;
else
{
build(*id,l,(l+r)/);
build(*id+,(l+r)/+,r);
tree[id].mi=min(tree[*id].mi,tree[*id+].mi);
}
return ;
}
int query(int id,int l,int r)
{
if(l==tree[id].left && r==tree[id].right)
return tree[id].mi;
int mid=(tree[id].left+tree[id].right)>>;
int ret=0x3f3f3f3f;
if(r<=mid)
ret=min(ret,query(id*,l,r));
else if(l>=mid+)
ret=min(ret,query(id*+,l,r));
else
{
int a,b;
a=query(id<<,l,mid);
b=query((id<<)+,mid+,r);
return min(a,b);
}
return ret;
}
double get_ans(int x,int mi)
{
double ans=;
ans+=mp[x].h-mi;
ans+=mp[x].kind==?:0.5;
return ans;
}
int main(void)
{
int t,cs=;cin>>t;
while(t--)
{
double ans,sum=;
scanf("%d%d%s",&n,&m,&ss[]);
mp[].h=;
for(int i=,ls=;i<=n;i++)
{
mp[i].h=mp[i-].h+ls;
if(ss[i]=='_')ls=,mp[i].kind=;
else if(ss[i]=='/')ls=,mp[i].kind=;
else if(ss[i]=='\\')ls=,mp[i].kind=,mp[i].h--;
//printf("%d : %d\n",i,mp[i].h);
}
build(,,n);
for(int i=,mi=query(,,m);i<=m;i++)
sum+=get_ans(i,mi);
ans=sum;
for(int i=m+,ls=query(,,m);i<=n;i++)
{
int mi=query(,i-m+,i);
sum-=get_ans(i-m,ls);
sum+=get_ans(i,mi);
if(ls>mi)
sum+=(m-1.0)*(ls-mi);
else if(ls<mi)
sum-=(mi-ls)*(m-1.0);
ls=mi;
ans=min(sum,ans);
}
printf("Case #%d: %.1f\n",cs++,ans);
} return ;
}

最新文章

  1. Mysql的基础使用之SQL原生语句的使用:表的 创建 删除 修改 (一)
  2. Javascript将构造函数扩展为简单工厂
  3. robots.txt的介绍和写作
  4. Hive 实战(1)--hive数据导入/导出基础
  5. 操作iframe
  6. selenium python (四)键盘事件
  7. zoj3820 Building Fire Stations 树的中心
  8. 网站性能扩展案例:每天30-50亿请求,300K QPS是如何炼成的
  9. PowerDesigner提示This data item is already used in a primary identifier.的处理
  10. PHP学习笔记十四【面向对象】
  11. cocos2d-x中的尺寸之三
  12. poj 3176 Cow Bowling(区间dp)
  13. Nginx 訪问日志增长暴增出现尖刀的具体分析
  14. CSS中image和text显示高度不一致的问题
  15. C语言之输出空心棱形图案
  16. FastDFS 学习笔记
  17. 【开源】Netty轻松实现聊天室,附带数据记录,聊天历史
  18. windows创建定时任务执行python脚本
  19. Asp.net Image控件显示Bitmap生成图像
  20. DAY04、流程控制if、while、for

热门文章

  1. 响应式网页设计:rem、em设置网页字体大小自适应
  2. NIPS(Conference and Workshop on Neural Information Processing Systems)
  3. DMSFrame 之查询表达式用法(一)
  4. 将MathType公式粘贴到文档中的步骤
  5. MYSQL5.7:几个简单的show语句演示
  6. CNBlog客户端--第一阶段记录
  7. LINQPad_批量修改图片名称
  8. AtCoder Tak and Hotels
  9. nginx默认访问目录时显示403错误
  10. angualar入门学习-- 自定义指令 指令编译执行过程