题目链接:uva 1451 - Average
题目大意:给出n和L,表示有一个长度为01组成的字符串,要求找出子串长度不小于L,且含有1的平均值最大,长度尽量小。
解题思路:树形结合,将字符串的每个位置对应成xOy坐标上的点,那么平均指即为两点之间的斜率。
然后维护一个相邻两点斜率递增的一个集合q(即凸点集),然后后面枚举的点只需要在这个集合中找切点即为该点满足题意的最优斜率。注意比如从1~5,有3个‘1’,除数不是5-1=4,要注意它占了1,2,3,4,5,5个位置,所以除数是5,所以枚举两点的时候要注意。
#include <stdio.h>
#include <string.h>
const int N = 1e5+10;
int n, L;
struct point {
int x, y;
point() { x = y = 0; }
point(int x, int y) {
this->x = x; this->y = y;
}
}p[N], q[N];
struct line {
point p0, p1;
line() {}
line(point a, point b) {
p0 = a; p1 = b;
}
bool operator > (const line& c) {
return (p1.y - p0.y) * (c.p1.x-c.p0.x) > (p1.x - p0.x) * (c.p1.y - c.p0.y);
}
bool operator == (const line& c) {
return (p1.y - p0.y) * (c.p1.x-c.p0.x) == (p1.x - p0.x) * (c.p1.y - c.p0.y);
}
bool operator >= (const line& c) {
return *this > c || *this == c;
}
line operator = (const line& a) {
p0 = a.p0; p1 = a.p1;
return *this;
}
int len() {
return p1.x - p0.x;
}
};
void init () {
char str[N];
scanf("%d%d%s", &n, &L, str);
int c = 0;
for (int i = 1; i <= n; i++) {
if (str[i-1] == '1') c++;
p[i].x = i; p[i].y = c;
}
}
void solve () {
int l = 0, r = -1;
line Max(p[0], p[L]);
for (int i = L; i <= n; i++) {
int u = i - L;
while (l < r && line(q[r-1], p[u]) >= line(q[r], p[u])) r--;
q[++r] = p[u];
while (l < r && line(q[l+1], p[i]) >= line(q[l], p[i])) l++;
line t(q[l], p[i]);
if (t > Max || ((t == Max) && t.len() < Max.len() )) {
Max = t;
}
}
printf("%d %d\n", Max.p0.x+1, Max.p1.x);
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
init();
solve();
}
return 0;
}
分享到:
相关推荐
判断输入字符串是否为镜像或回文串。 来源于UVaOJ - 401. 水题。
开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip,两年来每天都在解决一个uva在线裁判问题,算起来…
uva705 Slash Maze 的代码,在UVaOJ上通过
PDF试题
Algorithm-UVA-Solutions-in-Python.zip,python 3中各种uva(acm)问题的解决方案。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
uva532 Dungeon Master的源代码,并且AC了
这是UVA133 TheDoleQueue救济金发放问题,经典的算法问题。初学算法的人要对这种算法非常熟悉并且能熟练运用。
tpcw-nyu-uva-client 客户端
leetcode 2 算法-Java UVa Online Judge(ACM-ICPC Live ...使用:数组、哈希表、链表、二分搜索、动态规划、堆栈、堆、reedy、排序、树 DFS、BFS、图、二分搜索树、递归、记忆、队列、映射等。...Uva-ACM-ICPC