首页 > 其他分享 >【UVA 1451】Average

【UVA 1451】Average

时间:2022-11-29 21:35:08浏览次数:62  
标签:int ed Average st 1451 sst UVA include sum

题意: 给出一个长度为n的01序列, 要你求出一段至少长度为L的连续子序列, 该子序列的数字的平均值最大, 多解尽量保证长度小, 在保证起点编号尽量小, 求出起点和终点编号。

 

 

https://www.cnblogs.com/flipped/p/5202579.html

还有本校的yyf也讲的很好:https://www.cnblogs.com/yyf0309/p/6352175.html

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
const int M = 1e5 + 5;
int sum[M], q[M];
char s[M];
int xielv(int ed, int st, int eed, int sst){
        
    return (sum[ed] - sum[st-1])*(eed - sst + 1) - (sum[eed] - sum[sst-1])*(ed -st + 1);
    //return 1.0*(sum[ed] - sum[st-1])/(ed - st + 1);
}

#define esp 1e-6
int main(){
    //freopen("c.in","r",stdin);
    //freopen("c.out","w",stdout);
    int n, L;
    int T;
    scanf("%d", &T);
    while(T--){
        
        scanf("%d%d", &n, &L);
        scanf("%s", s);
        for(int i = 1; i <= n; i++)sum[i] = sum[i-1] + s[i-1] -'0';
        int h = 1, t = 0;
        int st = 1, ed = L;
        for(int i = L; i <= n; i++){
            while(h < t && xielv(q[t], q[t-1], i - L, q[t]) >= 0) t--;
            q[++t] = i - L + 1;
            while(h < t && xielv(i, q[h], i, q[h+1]) <= 0) h++;
            if(i - q[h] + 1 >= L){
                int tmp = xielv(i, q[h] , ed, st);
                if(tmp > 0 || (tmp == 0 && i - q[h] < ed - st)) ed = i, st = q[h];
            }
        }
        printf("%d %d\n",st, ed);    
    }
    
}
View Code

 有两个注意点:

1.算斜率时要用减法,除法卡精度;

2.对于代码中踢队尾的点,我用的是i-L+1,但yyf用的是i-L,因为i-L+1不在队列里,把这个循环 移到最下面,改成+1是等价的

标签:int,ed,Average,st,1451,sst,UVA,include,sum
From: https://www.cnblogs.com/EdSheeran/p/9904816.html

相关文章

  • UVA10129 Play on Words
    单词\(Play\)\(on\)\(Words\)一、题目描述输入\(n(n≤100000)\)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母可上一个单词的最后一个字母相同(......
  • 『题解』Codeforces 1758B XOR = Average
    Description构造一个\(a\)序列,使\(a_1\oplusa_2\oplusa_3\oplus\cdots\oplusa_n=\dfrac{sum(a)}{n}\)。Solution第一眼看到这道题,我想到的是分情况讨论。......
  • 『题解』UVA 240 Variable Radix Huffman Encoding
    题目传送门题意哈夫曼编码是一种最优编码方法。根据已知源字母表中字符出现的频率,将源字母表中字符编码为目标字母表中字符,最优的意思是编码信息的平均长度最小。在该问......
  • 『题解』UVA 210 Concurrency Simulator
    题目传送门按题意使用队列和双端队列模拟。其中就绪队列使用双端队列,阻止队列使用普通队列。p=58printalockunlockend我们观察一下这几个指令,可以发现......
  • 『题解』UVA 10534 Wavio Sequence
    题目传送门题意\(Wavio\)是整数序列,有如下特点:它的长度总为奇数,即\(2n+1\);前\(n+1\)个数构成一个严格的上升序列,后\(n+1\)个数构成一个严格下降的序列;任意......
  • 『题解』UVA 10795 A Different Task
    题目传送门双倍经验:LuoguP1242分析汉诺塔相信每一个合格的OIer都听说过并且实现过。这是一个递归的程序。汉诺塔本来就有两个规则:一次只能移动最上面的一个盘......
  • 『题解』UVA 148 Anagram checker
    题目传送门分析貌似除了递归式暴力搜索外,没有其它的有效算法了。这样的话,对代码性能的要求就比较高了,为了快速的判断一个短语是否包含某个单词,必须找出一种特定的数据结......
  • 『题解』UVA 12676 Inverting Huffman
    题目传送门题意静态哈夫曼编码是一种主要用于文本压缩的编码算法。给定一个由\(N\)个不同字符组成的特定长度的文本,算法选择\(N\)个编码,每个不同的字符一个编码。使......
  • 退役划水 #114515
    好像只会写流水账。所以就不写了。......
  • UVA1327 King's Quest
    King'sQuest题意对于每个王子,寻找他喜欢并且可以娶的女孩,统计,按顺序输出。思路可以考虑建图。在输入时,如果王子喜欢女孩,那么建一条从王子到女孩的边;如果女孩可以......