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


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

vijos1451 区间dp+st表优化

题意 守护者拿出被划分为n个格子的一个圆环,每个格子上都有一个正整数,并且定义两个格子的距离为两个格子之间的格子数的最小值。环的圆心处固定了一个指针,一开始指向了圆环上的某一个格子,你可以取下指...

Vijos 1451 圆环取数 【区间DP】

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

vijos1451(区间dp,好题,必须回顾进行再分析!!!)

呜呜呜,我真的太水了。 没有人说过,只要是环形的题,就要把它复制一下接在后面。然而我。。。。就犯了这米杀的错误。 这道题 关建1:分析题目的性质,找出有用的信息,即实质所要求的东西 关键2:如...

Vijos 1514 天才的记忆(ST表)

ST表是一种预处理状态,然后利用RMQ O(1)查询答案的技巧,这是在黄学长博客上找到的最简单的ST表来写了一法,大致明白什么意思。 ST表难点在于状态转换方程,如果将转换方程换一换又可以求其他东西...
  • llzhh
  • llzhh
  • 2017年09月27日 16:03
  • 90

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...
  • a456052
  • a456052
  • 2015年09月17日 17:59
  • 167

1451 - Average

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

uva 1451 Average 斜率优化

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

1451 - Average 快速求平均值

如何快速求取一段区间的平均值 用前缀的思想来看 非常简单 但是 本题题意要求的是 大于等于一段长度的区间的平均值的最大值 而且给出的数据范围很大 O(n*L)的直白比较算法 用于解决此问题不合适 这种...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1451 - Average(数形结合)
举报原因:
原因补充:

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