首页 > 其他分享 >AWTF2024A Moving Slimes 题解

AWTF2024A Moving Slimes 题解

时间:2024-08-29 11:47:52浏览次数:4  
标签:ld int 题解 Slimes long 史莱姆 Moving 坐标 max

发现史莱姆不合并也不会影响答案,所以就不用考虑合并了。

这样处理之后,史莱姆的移动可以看作是受到与其不在同一位置的史莱姆的吸引所完成的,每只史莱姆可以给其他史莱姆一个单位的吸引力。

因为每只史莱姆提供的吸引力是恒定的,所以考虑把吸引力放在它们的重心上,设 \(pre_i\) 表示坐标比第 \(i\) 只史莱姆小的所有史莱姆的重心的坐标,\(suf_i\) 表示坐标比第 \(i\) 只史莱姆大的所有史莱姆的重心的坐标。

设 \(d_i = suf_i - pre_i\),如果对所有史莱姆 \(i\),都有 \(d_i = 0\),则说明所有史莱姆已经处在同一个坐标上,满足终止条件。

只需要考虑每个 \(d_i\) 需要多长时间减少到 \(0\)。为了方便,称从开始移动直到有两个史莱姆发生碰撞为一轮。

每一轮结束后,因为发生了碰撞,所以 \(d_i\) 至少减少 \(k\),得到答案的下界 \(\frac {\max\{d_i\}} k\)。

显然史莱姆的相对顺序是不变的,终止条件也可以表述为对除最后一个以外的史莱姆 \(i\),\(a_i = a_{i + 1}\)。为了得到答案的上界,考虑尽可能延长这个条件达成的时间,则答案的上界也是 \(\frac {\max\{d_i\}} k\)。

为了最大化 \(\max\{d_i\}\),显然选择的 \(k\) 只史莱姆来自一段前缀和一段后缀。枚举每一对前后缀,容易在 \(O(1)\) 的时间内计算这一方案的答案,时间复杂度 \(O(n)\)。

#include <iomanip>
#include <iostream>

using namespace std;

typedef long long ll;
typedef long double ld;

int n, k;
int a[250005];
ll f[250005];

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> k;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        f[i] = f[i - 1] + a[i];
    }
    ld ans = 0;
    for (int i = 1; i < k; ++i)
        ans = max(ans, (ld)(f[n] - f[n - k + i]) / (k - i) - (ld)f[i] / i);
    cout << fixed << setprecision(20) << ans / k << endl;
    return 0;
}

标签:ld,int,题解,Slimes,long,史莱姆,Moving,坐标,max
From: https://www.cnblogs.com/bluewindde/p/18386376

相关文章

  • 历年CSP-J初赛真题解析 | 2016年CSP-J初赛阅读程序(23-26)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>usingnamespacestd;intmain(){intmax,min,sum,count=0;inttmp;cin>>tmp;......
  • CF1286E Fedya the Potter Strikes Back 题解
    题目链接点击打开链接题目解法牛题!题目实际上是要每次加入一个字符,求所有的\(border\)的神秘度之和考虑从前\(i-1\)个字符到前\(i\)个字符\(border\)的变化如果\(str_1=str_i\),会加入长度为\(1\)的\(border\),这一部分可以暴力加且只会保留\(i-1\)的\(border......
  • 华为java岗经典面试题解析
    题目为在一个整形的数组中,在数组中只有一值个是不重复的,其他的值都是有两个重复的值,找出不重复的那个值。{11,11,12,13,13,16,16}解析为当用Java来解决这个问题时,可以使用异或运算来找出只出现一次的元素。以下是一个示例Java程序,演示了如何在一个整型数组中找出只出现一次的元......
  • 洛谷P5322 [BJOI2019] 排兵布阵 题解
    代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintdp[20001],a[101][101],s,n,m;signedmain(){ cin>>s>>n>>m; for(intj=1;j<=s;j++){ for(inti=1;i<=n;i++){ cin>>a[i][j]; } } for(inti=1;......
  • 局域网内两台设备只有一方可以ping通问题解决
    场景局域网内有两台笔记本,都是windows系统,都是连接的同一个路由器,在同一个网段中。但是其中的一台笔记本192.168.1.101,另外一台是192.168.1.100ping命令测试发现192.168.1.101无法ping通192.168.1.100这是为什么呢?排查与修复首先的两台电脑为了安全,防火墙都是开启的。既然......
  • Atcoder [AGC006D] Median Pyramid Hard 题解 [ 紫 ] [ 二分 ] [ adhoc ]
    MedianPyramidHard:二分trick加上性质观察题。trick我们可以二分值域,然后把大于等于它的数标记成\(1\),其他标记为\(0\)(有些题需要标记成\(-1\)),然后根据这个来check方案是否可行,这通常通过判断某个数是否是\(1\)来实现。本质上其实就是check大于等于它的数能否成为......
  • 文件排版 题解
    前言题目链接:HDU。题意简述给\(n\)个单词和一张图片排版。每个单词长度为\(a_i\)。图片占行不确定,但是占列始终为\([dw+1,dw+pw]\)。排版宽度为\(W\),高度无限制。要求单词间有长度为\(1\)的空格,单词不能超出宽度\(W\),不能覆盖在图片上,单词间相对顺序不能发生改变......
  • 题解 [ABC199F] Graph Smoothing(中文/English)
    本题解提供英文版,位于示例代码之后。Englishversionofthiseditorialisprovidedafterthesamplecode.设行向量:\[A^{(k)}=\begin{bmatrix}a_1^{(k)}&a_2^{(k)}&\cdots&a_n^{(k)}\end{bmatrix}\]表示\(k\)次操作后每个节点点权的期望。特别地,\(A^{(0)}\)表......
  • 递推配套P1192 & 题解:P1192 台阶问题
    我们现在考虑递推。现在的问题是,如何从前几个数据推导出下一个数据。我们现在先推导\(f(n)\)。设\(k=3\)。到\(n\)的方法就是到能一步到\(n\)的台阶的方法总和,所以我们可以推导出:\(f(n)=f(n-1)+f(n-2)+\dots+f(n-k)/f(1)\)。即为:\(f(n)=\sum_{i=......
  • LOJ #160. 树形背包 题解
    Description有\(N\)个物品,编号分别为\(1\ldotsN\)。物品\(i\)的重量为\(w_i\),价值为\(v_i\)。给出每个物品依赖于哪个物品。我们用\(d_i=j\(i>j>0)\)表示:如果要选取物品\(i\),就必须先选取物品\(j\)。另外,我们用\(d_i=0(i>0)\)表示:该物品不依赖于任何物品。......