`
dailygoing
  • 浏览: 4466 次
社区版块
存档分类
最新评论

uva1451贪心算法,求平均值最大的子序列

 
阅读更多
//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 LCS算法

    uva531最长公共子序列问题水题,应用简单的dp即可ac有更快速的方法欢迎讨论

    算法入门经典UVa配套题目pdf

    - 随机化算法:如Monte Carlo方法,利用随机数来解决问题,例如求π的近似值。 8. **编程语言基础** - C++/Java基础:掌握这些常用编程语言的基本语法和特性,如变量、控制流、函数、类等。 - STL容器:了解...

    算法竞赛入门经典(第二版) UVa原题 PDF版

    《算法竞赛入门经典(第二版)》是一本深入浅出的算法学习书籍,由刘汝佳编著,深受编程竞赛爱好者和计算机科学学生的欢迎。这本书以其详尽的讲解和丰富的习题,帮助读者掌握基础及进阶算法,提升解决实际问题的能力...

    刘汝佳算法竞赛入门经典uva习题集锦

    UVA(University of Virginia)在线判题平台是许多算法竞赛爱好者实践和提升技能的重要场所,本书中的习题在UVA平台上有着丰富的实践价值。这个压缩包文件包含了书中所有与UVA相关的课后习题,以PDF格式呈现,方便...

    uvaoj 习题题目

    3. **字符串处理**:UVa中的题目经常需要处理字符串,涉及到模式匹配(KMP、Boyer-Moore算法)、字符串查找与替换、最长公共子序列、后缀数组、AC自动机等技术。 4. **数学应用**:许多题目需要利用数学知识,如数...

    Uva练习题

    UVA题目覆盖了多种编程语言,如C、C++、Java等,并涉及众多算法和数据结构,包括但不限于排序、搜索、图论、动态规划、回溯法、贪心策略等。通过解决UVA的问题,程序员可以增强对基本编程概念的理解,提高代码调试和...

    算法竞赛入门经典(第二版)3-12章习题+例题 UVa原题

    这不是原书pdf,找算法竞赛入门经典(第二版)pdf的同学请不要下了。 这个是书里采用的习题和例题的UVa原题pdf(英文)。 分享这个文件的原因是国内上UVa太慢了,有时候UVa还会挂。 而且书里把输入输出样例省去了,...

    UVA_示例代码

    2. **算法**:包括排序算法(快速排序、归并排序、堆排序等)、搜索算法(深度优先搜索DFS、广度优先搜索BFS)、动态规划、贪心策略、回溯法、分治法等。这些算法在解决复杂问题时起着关键作用。 3. **字符串处理**...

    UVA题目大全

    【UVA题目大全】是面向ACM(国际大学生程序设计竞赛)参赛者和算法爱好者的一份宝贵资源。UVA(University of Victoria Algorithm)在线判题系统是世界上最早的在线编程竞赛平台之一,它提供了大量的编程题目供用户...

    uva272 uva272 uva272

    标题中的"uva272 uva272 uva272"和描述中的"uva272"指的是UVA(University of Virginia)在线判题系统的第272题,这通常与编程竞赛和算法挑战有关。该题目的标签为"算法",意味着我们需要解决一个与计算机算法设计和...

    UVa Online Judge部分题目代码

    1. **基础算法**:在UVa的题目中,你会看到基础算法的应用,如排序(冒泡、选择、插入、快速、归并排序等)、搜索(深度优先搜索DFS、广度优先搜索BFS)、动态规划、贪心策略等。这些算法是解决复杂问题的基础。 2....

    uva 50个题解

    UVA(University of Virginia)在线判题系统是一个广受欢迎的平台,汇集了众多经典算法题目。"uva 50个题解"这个资源显然是针对这个平台的题目的解答集合,特别适合对算法学习和实践感兴趣的人群。下面,我们将深入...

    算法竞赛-如何使用栈-uva357

    uva357的栈实现版本

    uva最全ac代码

    UVA是全球最早的在线算法竞赛平台之一,吸引了众多程序员参与并提交代码解决各种算法问题。"AC"代表"Accepted",意味着代码已经通过了所有测试用例,成功解决了该问题。这个压缩包很可能包含了大量已通过UVA系统验证...

    算法竞赛入门经典UVa配套习题PDF

    其实刚刚就从下载频道下了一个名为 “算法入门经典UVa配套题目pdf”的文件,也是题目PDF,不过缺少Volume 0 以及Volume 3多了一个压缩包,所以自己整理了一下,收录了Volume 0 现在有上传一遍,希望福泽后人~

    Algorithm-UVA-Solutions-in-Python.zip

    4. **动态规划**:适用于解决具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列、矩阵链乘法等。动态规划的核心是状态转移方程和记忆化搜索。 5. **回溯法**:用于解决组合优化问题,如N皇后问题、...

    uva 200~299 22道题解 均accept

    UVA在线判题平台是一个著名的编程竞赛和练习平台,它提供了各种难度级别的算法和编程问题,旨在帮助程序员提高算法设计和实现能力。 在提供的文件列表中,我们可以看到以下题目对应的代码: 1. **uva201.cpp** - ...

    uva.rar_UVA_posAgent_uva 2d_uva_trilearn

    在IT领域,UVA(University of Virginia)是一个著名的在线算法竞赛平台,它为程序员提供了大量问题来提升算法和编程技能。"uva.rar_UVA_posAgent_uva 2d_uva_trilearn"这个标题可能是指一个与UVA平台相关的项目或...

    uva 部分题目解决代码

    在IT领域,特别是编程竞赛和算法训练中,UVA(University of Virginia)是一个知名的在线判题平台,它为程序员提供了大量的编程题目,旨在提升大家的算法思维和编程能力。"uva 部分题目解决代码"这个压缩包很可能是...

    Art_of_Programming_Contest_SE_for_uva

    - **栈**: 栈是一种后进先出(Last In First Out, LIFO)的数据结构,常用于实现递归调用或表达式求值。 - **队列**: 队列是一种先进先出(First In First Out, FIFO)的数据结构,适用于任务调度等场景。 - **树**:...

Global site tag (gtag.js) - Google Analytics