//uva1451,0.07s //贪心算法,求平均值最大的子序列 //数形结合,求最大斜率 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int N = 100005; int n; int front[N], s[N]; char c[N]; double aotu(int x1, int x2,int x3, int x4) { return (s[x4]-s[x3])*(x2 - x1) - (s[x2] - s[x1])*(x4 - x3); } int main() { int i,T,L,rear,a,b,res1,res2; //double t,best; scanf("%d", &T); while (T--) { scanf("%d%d", &n,&L); scanf("%s", &c); if (n == L) { printf("1 %d\n", n); continue; } s[0] = 0; for (i = 1; i <= n; i++) { s[i] = s[i - 1] + c[i-1]-'0'; } a = b = 0; //best = 0.0; res1 = 0; res2 = L; for (rear = L; rear <= n; rear++) { while (b-a>1 && aotu(front[b-2],rear-L,front[b-1],rear-L)<=0) b--;//删除凸点,或直线中间一点 front[b++] = rear - L ;//front队列中加入新点,0起点,rear-front为距离,sum差为序列和 while (b - a>1 && aotu(front[a],rear, front[a+1],rear)>=0 ) a++;//front[a]是切点,其后不会再有斜率更小的,因为没有凸点了 //从队列前面删除斜率小的,被删除的以后也不会成为最优front; //t = (s[rear] - s[front[a]] + 0.0) / (rear-front[a]); //可能是double的精度有限,找最大斜率t会WA i = aotu(res1,res2,front[a],rear); if (i > 0 || (i==0 && rear - front[a] < res2 - res1) ) { //best = t; res1 = front[a]; res2 = rear; } } printf("%d %d\n", res1+1,res2);//起点+1 } return 0; } /* 2 17 5 00101011011011010 20 4 11100111100111110000 7 11 6 9 */
相关推荐
uva531最长公共子序列问题水题,应用简单的dp即可ac有更快速的方法欢迎讨论
- 随机化算法:如Monte Carlo方法,利用随机数来解决问题,例如求π的近似值。 8. **编程语言基础** - C++/Java基础:掌握这些常用编程语言的基本语法和特性,如变量、控制流、函数、类等。 - STL容器:了解...
《算法竞赛入门经典(第二版)》是一本深入浅出的算法学习书籍,由刘汝佳编著,深受编程竞赛爱好者和计算机科学学生的欢迎。这本书以其详尽的讲解和丰富的习题,帮助读者掌握基础及进阶算法,提升解决实际问题的能力...
UVA(University of Virginia)在线判题平台是许多算法竞赛爱好者实践和提升技能的重要场所,本书中的习题在UVA平台上有着丰富的实践价值。这个压缩包文件包含了书中所有与UVA相关的课后习题,以PDF格式呈现,方便...
3. **字符串处理**:UVa中的题目经常需要处理字符串,涉及到模式匹配(KMP、Boyer-Moore算法)、字符串查找与替换、最长公共子序列、后缀数组、AC自动机等技术。 4. **数学应用**:许多题目需要利用数学知识,如数...
UVA题目覆盖了多种编程语言,如C、C++、Java等,并涉及众多算法和数据结构,包括但不限于排序、搜索、图论、动态规划、回溯法、贪心策略等。通过解决UVA的问题,程序员可以增强对基本编程概念的理解,提高代码调试和...
这不是原书pdf,找算法竞赛入门经典(第二版)pdf的同学请不要下了。 这个是书里采用的习题和例题的UVa原题pdf(英文)。 分享这个文件的原因是国内上UVa太慢了,有时候UVa还会挂。 而且书里把输入输出样例省去了,...
2. **算法**:包括排序算法(快速排序、归并排序、堆排序等)、搜索算法(深度优先搜索DFS、广度优先搜索BFS)、动态规划、贪心策略、回溯法、分治法等。这些算法在解决复杂问题时起着关键作用。 3. **字符串处理**...
【UVA题目大全】是面向ACM(国际大学生程序设计竞赛)参赛者和算法爱好者的一份宝贵资源。UVA(University of Victoria Algorithm)在线判题系统是世界上最早的在线编程竞赛平台之一,它提供了大量的编程题目供用户...
标题中的"uva272 uva272 uva272"和描述中的"uva272"指的是UVA(University of Virginia)在线判题系统的第272题,这通常与编程竞赛和算法挑战有关。该题目的标签为"算法",意味着我们需要解决一个与计算机算法设计和...
1. **基础算法**:在UVa的题目中,你会看到基础算法的应用,如排序(冒泡、选择、插入、快速、归并排序等)、搜索(深度优先搜索DFS、广度优先搜索BFS)、动态规划、贪心策略等。这些算法是解决复杂问题的基础。 2....
UVA(University of Virginia)在线判题系统是一个广受欢迎的平台,汇集了众多经典算法题目。"uva 50个题解"这个资源显然是针对这个平台的题目的解答集合,特别适合对算法学习和实践感兴趣的人群。下面,我们将深入...
uva357的栈实现版本
UVA是全球最早的在线算法竞赛平台之一,吸引了众多程序员参与并提交代码解决各种算法问题。"AC"代表"Accepted",意味着代码已经通过了所有测试用例,成功解决了该问题。这个压缩包很可能包含了大量已通过UVA系统验证...
其实刚刚就从下载频道下了一个名为 “算法入门经典UVa配套题目pdf”的文件,也是题目PDF,不过缺少Volume 0 以及Volume 3多了一个压缩包,所以自己整理了一下,收录了Volume 0 现在有上传一遍,希望福泽后人~
4. **动态规划**:适用于解决具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列、矩阵链乘法等。动态规划的核心是状态转移方程和记忆化搜索。 5. **回溯法**:用于解决组合优化问题,如N皇后问题、...
UVA在线判题平台是一个著名的编程竞赛和练习平台,它提供了各种难度级别的算法和编程问题,旨在帮助程序员提高算法设计和实现能力。 在提供的文件列表中,我们可以看到以下题目对应的代码: 1. **uva201.cpp** - ...
在IT领域,UVA(University of Virginia)是一个著名的在线算法竞赛平台,它为程序员提供了大量问题来提升算法和编程技能。"uva.rar_UVA_posAgent_uva 2d_uva_trilearn"这个标题可能是指一个与UVA平台相关的项目或...
在IT领域,特别是编程竞赛和算法训练中,UVA(University of Virginia)是一个知名的在线判题平台,它为程序员提供了大量的编程题目,旨在提升大家的算法思维和编程能力。"uva 部分题目解决代码"这个压缩包很可能是...
- **栈**: 栈是一种后进先出(Last In First Out, LIFO)的数据结构,常用于实现递归调用或表达式求值。 - **队列**: 队列是一种先进先出(First In First Out, FIFO)的数据结构,适用于任务调度等场景。 - **树**:...