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

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

#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. css 禅意花园 笔记

    1.  FOUC(Flash Of Unstyled Content) 现象( 在某些情况下,IE加载网页时会出现短暂的CSS样式失效. a: 只发生在Windows上的 IE (5.0版本以上) b ...

  2. C#中oracle数据库的连接方法

    C#中oracle数据库的连接方法 一.关于数据库的操作 1.数据库连接      有2种:      第一种:古老的方法(较为死板,不利于灵活操作),即用OracleConnection的类来连接 ...

  3. (转)fock函数详解

    转自:http://www.cnblogs.com/bastard/archive/2012/08/31/2664896.html linux中fork()函数详解  一.fork入门知识 一个进程, ...

  4. html input size maxlength

    最近做项目用到input的size和maxlength属性,以前只顾用没有用心去看看这2个标签的区别,今天周末baidu了一下,有所理解.特记录于此!   <p>Name: <inp ...

  5. asp.net页面触发事件panel滚动条高度不变的实现方法

    asp.net页面按钮点击触发事件后panel滚动条非自动回到顶端,每次都要往下拉一下,关于这个问题的解决方法如下 此文是为解决asp.net页面按钮点击触发事件后panel滚动条非自动回到顶端的解决 ...

  6. HTTP请求的过程&HTTP/1.0和HTTP/1.1的区别&HTTP怎么处理长连接

    http://www.cnblogs.com/GumpYan/p/5821193.html

  7. CodeFirst中DbContext动态添加DbSet

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. IOS控件:分歧解决其(UILabel 和 IBAction)

    #import <UIKit/UIKit.h> @interface demo7_dayViewController : UIViewController { // 用来显示程序结果 IB ...

  9. boost::interprocess(2)

    //doc_anonymous_mutex_shared_data.hpp #include <boost/interprocess/sync/interprocess_mutex.hpp> ...

  10. 【BZOJ2836】魔法树 树链剖分

    [BZOJ2836]魔法树 Description Input Output Sample Input 4 0 1 1 2 2 3 4 Add 1 3 1 Query 0 Query 1 Query ...