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

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

#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. What can be use as an encoder

    原于2018年5月在实验室组会上做的分享,今天分享给大家,希望对大家的科研有所帮助.

  2. jquery动态调整div大小使其宽度始终为浏览器宽度

    需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点,下面是具体实现,大家可以参考下 有时候我们需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点 ...

  3. 【转】JavaScript和Java的区别

    虽然JavaScript与Java有紧密的联系,但却是两个公司开发的不同的两个产品.      Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合于Internet 应用程序开发:而Ja ...

  4. MAMP下配置虚拟主机域名

    第一步:修改虚拟主机地址: /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf 第二步:

  5. Android无线测试之—UiAutomator UiObject API介绍七

    判断对象是否存在 1.判断对象是否存在相关API 返回值 API 描述 boolean waitForExists(long timeout) 等待对象出现 boolean waitUntilGone ...

  6. 怎么查看mac系统是32位还是64位的操作系统

    如何查看mac系统是32位还是64位的操作系统 (一)点击工具栏左上角点击 (苹果Logo)标志,关于本机  -->  更多信息 --> 系统报告  -->(左侧栏中)软件 (二) ...

  7. Spring Data 关于Repository的介绍(四)

    Repository类的定义: public interface Repository<T, ID extends Serializable> { } 1)Repository是一个空接口 ...

  8. HTTP缓存实现的原理

    浏览器是如何知道使用缓存的,其实这都是通过http中,浏览器将最后修改时间发送请求给web服务器,web服务器收到请求后跟服务器上的文档最后修改的时间对比,如果web服务器上最新文档修改时间小于或者等 ...

  9. 如何在 window 上面输入特殊字符?

    打开 字符映射表 程序 选中任意一个字符,它会在下方显示该字符的 16进制 转换16进制至10进制,并在输入法打开的状态下,按住 Alt 键输入 10 进制数值即可.

  10. 搜索过滤grep(win下为findstr)

    搜索过滤grep(win下为findstr) 1.主要参数 [options]主要参数: -c:只输出匹配行的计数. -i:不区分大小写 -h:查询多文件时不显示文件名. -l:查询多文件时只输出包含 ...