BZOJ3316 JC loves Mkk

首先断环成链,变成两倍长度。

然后二(fen)分(shu)答(gui)案(hua),查看答案为ans的长度在[L, R]之间的链存不存在。

我们可以维护前缀和,用单调队列O(n)判断是否和大于0

又学习了个黑科技。。。::x表示全局变量x。。。

 1 /**************************************************************
 2     Problem: 3316
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:1960 ms
 7     Memory:5492 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13
14 using namespace std;
15 typedef long double llf;
16 typedef long long ll;
17 const int N = 200005;
18 const llf eps = 1e-10;
19
20 int n, L, R, mx, a[N];
21 llf sum[N];
22 ll ans1, ans2, gcd;
23 int q[2][N], h[2], t[2];
24
25 inline int read() {
26   int x = 0;
27   char ch = getchar();
28   while (ch < ‘0‘ || ‘9‘ < ch)
29     ch = getchar();
30   while (‘0‘ <= ch && ch <= ‘9‘) {
31     x = x * 10 + ch - ‘0‘;
32     ch = getchar();
33   }
34   return x;
35 }
36
37 bool check(llf x) {
38   int i;
39   for (i = 1; i <= n; ++i)
40     sum[i] = sum[i - 1] + a[i] - x;
41   h[0] = h[1] = t[0] = t[1] = 0;
42   for (i = L; i <= n; ++i) {
43     int *q = ::q[i & 1], &h = ::h[i & 1], &t = ::t[i & 1], now = i - L;
44     while (h < t && sum[q[t]] > sum[now]) --t;
45     q[++t] = now;
46     while (i - q[h + 1] > R) ++h;
47     if (sum[i] - sum[q[h + 1]] >= 0) {
48       ans2 = i - q[h + 1];
49       return 1;
50     }
51   }
52   return 0;
53 }
54
55 llf work() {
56   llf l = 0, r = mx, mid;
57   while (r - l > eps) {
58     mid = (l + r) / 2.0;
59     if (check(mid)) l = mid;
60     else r = mid;
61   }
62   return (l + r) / 2.0;
63 }
64
65 int main() {
66   int i;
67   n = read(), L = read(), R = read();
68   if (L & 1) ++L;
69   if (R & 1) --R;
70   for (i = 1; i <= n; ++i) {
71     a[i] = a[n + i] = read();
72     mx = max(mx, a[i]);
73   }
74   n <<= 1;
75
76   ans1 = (ll) (work() * ans2 + 0.5);
77   gcd = __gcd(ans1, ans2);
78   ans1 /= gcd, ans2 /= gcd;
79   if (ans2 == 1) printf("%lld\n", ans1);
80   else printf("%lld/%lld\n", ans1, ans2);
81   return 0;
82 }

时间: 2024-08-06 17:12:22

BZOJ3316 JC loves Mkk的相关文章

bzoj3316 JC loves Mkk题解

3316: JC loves Mkk Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 979  Solved: 316[Submit][Status][Discuss] Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整数,就输出整数:否则,输出既约分数"P/Q"来表示. Sample Input 5 3 4 3 1 2 4 5 Sampl

bzoj3316 JC loves Mkk 二分答案 单调队列

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3316 题意:给出一个环,求出长度在$L~R$之间任意偶数的一个序列,使得这个序列的平均值最大. 看到分数就知道这题不可做-- 好啦言归正传--这道题应该怎么做呢--直接上$PoPoQQQ$大爷的语录: 看到环果断倍增 看到平均值最大果断二分答案 看到长度[L,R]果断单调队列 没错就是这样--平均值这个东西其实就是要这么瞎搞--二分答案,然后给每个元素"咔嚓"一下去掉二分的值,之后

【BZOJ3316】JC loves Mkk 分数规划+单调队列

[BZOJ3316]JC loves Mkk Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整数,就输出整数:否则,输出既约分数“P/Q”来表示. Sample Input 5 3 4 3 1 2 4 5 Sample Output 7/2 HINT 1≤L≤R≤n≤10^5,0≤ai≤10^9,保证问题有解,数据随机生成 题解:直接二分答案,然后每个糖果的权值都变成a[i]-mid,我们需

BZOJ 3316 JC loves Mkk 二分答案+单调队列

题目大意:给定一个环,要求在这个环上截取长度为偶数且在[L,R]区间内的一段,要求平均值最大 看到环果断倍增 看到平均值最大果断二分答案 看到长度[L,R]果断单调队列 对数组维护一个前缀和,对前缀和维护单调递增的单调队列 每扫过一个数sum[i],将sum[i-L]加入单调队列,再把距离i超过R的点删掉 长度为偶数?对奇数位置和偶数位置分别维护一个单调队列即可 每次找到大于0的子串之后记录一下分母再退出就行了 #include <cstdio> #include <cstring>

3563: DZY Loves Chinese - BZOJ

Description神校XJ之学霸兮,Dzy皇考曰JC.摄提贞于孟陬兮,惟庚寅Dzy以降.纷Dzy既有此内美兮,又重之以修能.遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边.时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭.而后俟其日A50题则又令其复原.(可视为立即复原)然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通.Input第一行N,M接下来M行x,y:表示M条膴蠁边,依次编号接下来一行Q接下来Q行:每行第一个数K

【BZOJ3563/3569】DZY Loves Chinese II 线性基神题

[BZOJ3563/3569]DZY Loves Chinese II Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边. 时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭. 而后俟其日A50题则又令其复原.(可视为立即复原) 然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通. Input 第

[BZOJ3569]DZY Loves Chinese II(随机化+线性基)

3569: DZY Loves Chinese II Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1515  Solved: 569[Submit][Status][Discuss] Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边. 时而Dzy狂WA而怒发冲冠,神力外溢,

Codeforces 444A DZY Loves Physics(图论)

题目链接:Codeforces 444A DZY Loves Physics 题目大意:给出一张图,图中的每个节点,每条边都有一个权值,现在有从中挑出一张子图,要求子图联通,并且被选中的任意两点,如果存在边,则一定要被选中.问说点的权值和/边的权值和最大是多少. 解题思路:是图论中的一个结论,最多两个节点,所以枚举两条边就可以了.我简单的推了一下,2个点的情况肯定比3个点的优. 假设有3个点a,b,c,权值分别为A,B,C 现a-b,b-c边的权值分别为u,v 那么对于两点的情况有A+Bu,B+

[HDU5677]ztr loves substring

ztr loves substring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description ztr love reserach substring.Today ,he has n string.Now ztr want to konw,can he take out exactly k palindrome from all substrin