1451 - Average(数形结合)

原创 2015年07月06日 19:16:59

该题表面让我们求一个字符串的问题,但是却可以转化成求斜率的问题, 紫书上已经说的很清楚了,我这里就不再赘述  。

代码如下 :

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 5;
int n,T,L;
double a[maxn],p[maxn];
char s[maxn];
int campare(int x1,int x2,int x3,int x4){   //直线p[x1]p[x2]的斜率减去p[x3]p[x4]的斜率
    return (a[x1] - a[x2-1])*(x3-x4+1) - (a[x3] - a[x4-1])*(x1-x2+1); 
}
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%s",&n,&L,s);
        int len = strlen(s);
        a[0] = 0;
        for(int i=0;i<len;i++){
            a[i+1] = a[i] + s[i] - '0'; //a[i]为前i项的和
        }
        int l = 1, r = L , i = 0 , j = 0; //用两个指针 i 和 j 来动态维护下凸区间。
        for(int t = L;t <= len;t ++) {
            while(j - i > 1 && campare(t-L,p[j-2],t-L,p[j-1])>=0) j--; //删除上凸的点
            p[j++] = t - L + 1; //增加新元素
            while(j - i > 1 && campare(t,p[i+1],t,p[i])>=0) i++; //确定新的切点,因为切点的x坐标一定是不断增加的
            int c = campare(r,l,t,p[i]);
            if(c < 0 || c == 0 && (r-l)>(t-p[i])) { 
                l = p[i] ; r = t ;
            }
        }
        cout<<l<<' '<<r<<endl;
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

UVa 1451:Average(数形结合)

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=844&page=show_pr...

uva1451 平均值 数形结合

1. 数形结合是一种便于分析的手段,可用于表达多个变量间的函数关系. 2. 例如利用斜率来表示平均数(构造两个变量和第三个变量的关系)。 3. 比较斜率时将除法转换为乘法。 4. 通过i和i+1 j-...

UVa1451 - Average

UVa1451 - AverageA DNA sequence consists of four letters, A, C, G, and T. The GC-ratio of a DNA sequ...

1451 - Average

A DNA sequenceconsists of four letters, A, C, G, and T. The GC-ratio of a DNA sequence is thenumber ...

1451 - Average 快速求平均值

如何快速求取一段区间的平均值 用前缀的思想来看 非常简单 但是 本题题意要求的是 大于等于一段长度的区间的平均值的最大值 而且给出的数据范围很大 O(n*L)的直白比较算法 用于解决此问题不合适 这种...

uva 1451 Average 斜率优化

题意:给出一个长度为n的字符串,要求找到长度至少为k的连续子串的最大平均值。n #include #include #include #include #include #in...

Vijos 1451 圆环取数 【区间DP】

背景 小K攒足了路费来到了教主所在的宫殿门前,但是当小K要进去的时候,却发现了要与教主守护者进行一个特殊的游戏,只有取到了最大值才能进去Orz教主…… 描述 守护者拿出被划分为n...

DIN1451字体编码规则

  • 2012-12-10 13:12
  • 818KB
  • 下载

1451压力传感器

  • 2012-08-14 23:06
  • 153KB
  • 下载

poj 1451 || hdu 1298 T9

一道模拟手机输入法的题目,输入每个单词以及出现的频率,最后给你一串中
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)