题意:给定一段01序列,求一段长度不小于L的连续序列,使其平均值最大

思路:一看就想到了斜率优化,但是用基本的推公示一直没推出来,看了别人的代码,像推出斜率的式子一直没弄出来。。后来一看别人写的题解,原来是数形结合可以推出斜率单调。然后维护一个下凹的队列(斜率要递增)。至于为什么这么做,可以吧sum[i](把开头到当前的和)看作纵坐标,i当作横坐标,然后做出图,就会发现实际上就是找横坐标之差大于等于L的点形成直线斜率最大。那么在纸上画一下,结论就很明显了。。

当然,出了这种方法外,还有二分最大斜率,然后在判定的方法。。(判定时把每个数减去,斜率,接着用类似最大子序列合的方法,这种方法具体我没写过,不过有人好像就是这样过的)

不过想想,其实两种本质上应该是一种,只不过求斜率的方法一个O(1),一个log(N)而已

---------不懂看一下周源大神的论文《浅谈数形结合思想在信息学竞赛中的应用》讲的很明白

ps.poj2018也是同样的题,有空再去写一下了。

**********************************************************************

 /*
* Author: yzcstc
* Created Time: 2013/8/18 0:35:49
* File Name: uval4726.cpp
*/
#include<iostream>
#include<sstream>
#include<fstream>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cctype>
#include<cmath>
#include<ctime>
#include<utility>
#define M0(x) memset(x, 0, sizeof(x))
#define Inf 0x7fffffff
#define PB push_back
#define SZ(v) ((int)(v).size())
#define eps 1e-8
using namespace std;
int n , L, TT;
int Y[], q[]; double ratio(int i, int j){
return i == j ? Inf : (Y[j] - Y[i] + 0.0)/(j - i + 0.0);
} void solve(){
scanf("%d%d", &n, &L);
Y[] = ;
for (int i = ; i <= n; ++i){
scanf("%1d", &Y[i]);
Y[i] += Y[i-];
}
M0(q);
int l = , r = , ansl = , ansr = n;
double ans = -;
for (int i = L; i <= n; ++i){
while (l < r && ratio(q[r - ], q[r]) >= ratio(q[r - ], i - L)) --r;
q[++r] = i - L;
while (l < r && ratio(q[l], i) <= ratio(q[l + ], i)) ++l;
if (ans + eps < ratio(q[l], i) || fabs(ans - ratio(q[l], i)) < eps && i - q[l] < ansr - ansl){
ans = ratio(q[l], i);
ansl = q[l];
ansr = i;
}
}
printf("%d %d\n", ansl + , ansr);
} int main(){
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%d", &TT);
while (TT--){
solve();
}
// fclose(stdin); fclose(stdout);
return ;
}

Uval4726-数形结合的思想的更多相关文章

  1. HDU3045 Picnic Cows (斜率DP优化)(数形结合)

    转自PomeCat: "DP的斜率优化--对不必要的状态量进行抛弃,对不优的状态量进行搁置,使得在常数时间内找到最优解成为可能.斜率优化依靠的是数形结合的思想,通过将每个阶段和状态的答案反映 ...

  2. UVA 1451 Average平均值 (数形结合,斜率优化)

    摘要:数形结合,斜率优化,单调队列. 题意:求一个长度为n的01串的子串,子串长度至少为L,平均值应该尽量大,多个满足条件取长度最短,还有多个的话,取起点最靠左. 求出前缀和S[i],令点Pi表示(i ...

  3. UVa 1451 (数形结合 单调栈) Average

    题意: 给出一个01串,选一个长度至少为L的连续子串,使得串中数字的平均值最大. 分析: 能把这道题想到用数形结合,用斜率表示平均值,我觉得这个想法太“天马行空”了 首先预处理子串的前缀和sum,如果 ...

  4. 【做题】TCSRM591 Div1 500 PyramidSequences——数形结合&思维

    题意:定义高度为\(x\)的金字塔数列为周期为\(2x-2\)的无限数列.它的每一个周期都是形如\(1,2,...,x-1,x,x-1,...,2\)的形式.记高度为\(x\)的金字塔数列第\(i\) ...

  5. poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题

    题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的 ...

  6. 紫书 例题8-9 UVa 1451 (数形结合)

    这道题用了数形结合, 真的牛逼, 完全想到不到还可以这么做 因为题目求的是平均值, 是总数除以个数, 这个时候就可以联系 到斜率, 也就是说转化为给你一堆点, 让你求两点之间的最大斜率 要做两个处理 ...

  7. HDU 4696 Answers (脑补+数形结合)

    题意 给一个图,每个点的出度为1,每个点的权值为1或者2.给Q个询问,问是否能找到一条路径的权值和M. 思路 由于每个点的出度为1,所以必然存在环.又因为c[i]只能取1或者2,可以组成任意值,所以只 ...

  8. BZOJ2659 [Beijing wc2012]算不出的算式 【数形结合】

    题目链接 BZOJ2659 题解 真没想到,, 观察式子 \[\sum\limits_{k = 1}^{\frac{p - 1}{2}} \lfloor \frac{kq}{p} \rfloor\] ...

  9. 【数形结合】Erratic Expansion

    [UVa12627]Erratic Expansion 算法入门经典第8章8-12(P245) 题目大意:起初有一个红球,每一次红球会分成三红一蓝,蓝球会分成四蓝(如图顺序),问K时的时候A~B行中有 ...

随机推荐

  1. hdu 2444(二分图) The Accomodation of Students

    http://acm.hdu.edu.cn/showproblem.php?pid=2444 大意是给定n个学生,他们之间可能互相认识,首先判断能不能将这些学生分为两组,使组内学生不认识: 现想将学生 ...

  2. Business.Startup.Learning from Startup Mistakes at SpringSource

    http://www.infoq.com/news/2014/07/startup-spring

  3. delphi sdk 函数个数知多少?

    pascal用了这么久 那么您知道他有多少个函数,过程? 笔者统计了一下, delphi 7    21579个delphi xe2   41145个lazarus 1.12  70987个 ==== ...

  4. Linux 双网关(电信与联通)

    经常有这种需求,一台Linux服务器配置电信IP和网通IP,默认情况下,后启动的网卡的网关生效.南电信北网通,配置电信和网通IP,无非是为了减少网络延时,使电信用户的请求响应在电信网络中传输,网通用户 ...

  5. Spring 如何保证后置处理器的执行顺序 - OrderComparator

    Spring 如何保证后置处理器的执行顺序 - OrderComparator Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.htm ...

  6. String... to 可变参数的使用

    public class testMail { public static void fun(int... x) { for(int i = 0;i < x.length;i++) { Syst ...

  7. connect: Address is invalid on local machine or port is not valid on remote

    idea 运行正常打成jar包运行提示“connect: Address is invalid on local machine or port is not valid on remote” , 解 ...

  8. ubuntu的应用中心打不开、闪退

    原因没有细究,但问题已经解决简单粗暴: 1.更新列表 apt-get update apt-get dist-upgrade 2.重新安装应用中心 apt-get install  --reinsta ...

  9. sticky footer 布局

    <!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...

  10. 69.查看APP沙盒缓存的内容文件

    第一步:链接真机设备,点击Xcode ,按command+shift+2  弹出电脑所运行的APP列表 第二步:选中你需要查看的APP,点击最下面! 类似于设置图标的按钮! 点击第二个Download ...