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

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

#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 ;
}

UVALive 6915 J - Leveling Ground的更多相关文章

  1. UVALive 6915 Leveling Ground 倍增RMQ

    Leveling Ground 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid ...

  2. Leveling Ground(数论,三分法,堆)

    Leveling Ground(数论,三分法,堆) 给定n个数和a,b每次可以选择一段区间+a,-a,+b或-b,问最少操作几次能把他们都变成0.n<=1e5. 首先差分一下序列,问题就会变成了 ...

  3. BZOJ2800 [Poi2012]Leveling Ground 【扩展欧几里得 + 三分 + 堆】

    题目链接 BZOJ2800 题解 区间加极难操作,差分之后可转化为两点一加一减 那么现在问题就将每个点暂时独立开来 先判定每个点是否被\((A,B)\)整除,否则无解 之后我们先将\(A,B\)化为互 ...

  4. POI2012题解

    POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...

  5. SSD: Single Shot MultiBox Detector

    By Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexande ...

  6. 深度学习笔记(七)SSD 论文阅读笔记简化

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  7. 深度学习笔记(七)SSD 论文阅读笔记

    一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...

  8. H5实现魔方游戏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

随机推荐

  1. php 判断是否在微信浏览器中打开

    <?php $a=false; $b=$_SERVER['HTTP_USER_AGENT']; if(strpos($b,"MicroMessenger")===false) ...

  2. mfc小工具开发之定时闹钟之---多线程急线程同步

    一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常 ...

  3. HTML5 选择前置摄像头,选择后置摄像头

    最近发现我写的都是乱七八糟的,觉得应该给大家带点福利,于是写了这篇 背景:最近想做个web应用,需要用到摄像头,但是发现默认一直是前置摄像头,拍照很麻烦,于是找了很多文章,居然没有人提到,只好FQ去找 ...

  4. Page_ClientValidate 用法

    JS script function ConfirmMe(){   return confirm("Do you want to proceed?");} ASPX <asp ...

  5. python解释器的分类及特点

    CPython 当从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,所以叫CPython,在命名行下运行python ...

  6. vmware 虚拟机下 ubuntu 与主机共享锐捷

    一直以来.想要学习 linux ,在 vm 虚拟机下安装了 ubuntu 系统. 可是这个系统并不能上网.原因就是 vm 虚拟机的虚拟网卡会和锐捷冲突.锐捷会检測到多网卡,断开网络,所以不得不禁用 v ...

  7. 面试题思考:Stack和Heap的区别

    堆栈的概念: 堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常 ...

  8. 阿里面试经历JAVA总结

    为记录阿里的电面经历,特与大家分享,岗位是JAVA研发工程师. 一面主要问题如下: 1)首先自我介绍 2)数据结构算法的基本问题,如排序算法,二叉树遍历,后序遍历非递归,图的最短路径问题 3)对一个数 ...

  9. Segmented 标签栏 切换效果

    转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0512/1615.html http://www.it165.net/pr ...

  10. python 之 re模块(正则表达式)

    一.起源(历史) 正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究.美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方 ...