首页 > 其他分享 >P5155 [USACO18DEC] Balance Beam P

P5155 [USACO18DEC] Balance Beam P

时间:2024-02-17 19:22:05浏览次数:33  
标签:read dfrac top Beam il USACO18DEC Balance void define

假设有一个长度为 \(L\) 的木块。

定义 \(f_i\) 从 \(i\) 走到 \(L\) 的概率,有 \(f_i=\dfrac{f_{i+1}+f_{i-1}}{2}\)。由 \(f_1=0,f_L=1\) 可以递推得出 \(f_i=\dfrac{i}{L}\)。

若一个节点移动的期望收益比当前点停止的收益低,则设这个点为关键点。

从 \(i\) 出发开始移动,期望收益是其走到左右第一个关键点的概率乘上左右第一个关键点的权值,再与当前点停止的权值取 \(max\)。

设该点左右两点分别为 \(a,b\) 由之前的结论可以容易推出到 \(a\) 停止的概率为 \(\dfrac{b-i}{b-a}\),到 \(b\) 停止的概率为 \(\dfrac{i-a}{b-a}\)。期望收益则为 \(v_a \times \dfrac{b-i}{b-a} + v_b\times \dfrac{i-a}{b-a}\)。

将每个点看作二维平面上的点 \((i,v_i)\)。将 \(a,b\) 两点连线,该一次函数与直线 \(x=i\) 的交点 \((i,t)\),\(t\) 的值则为期望收益(式子与上面那个相同)。所以,一个为关键点,满足条件为点 \((i,v_i)\) 在点 \((i,t)\) 之上。

可以发现,这些关键点构成一个凸包。

#include <bits/stdc++.h>
using namespace std;
#define il inline
#define ptc putchar
#define pb push_back
#define R(i, l, r) for (int i = l; i <= r; ++i)
#define debug puts("--------------------------------------------")
typedef long long ll;
typedef pair<ll, ll> PII;
namespace ZeroTwo
{
    template <typename T>
    il void read(T &x) 
    { 
        x = 0; T f = 1; char ch;
        while (!isdigit(ch = getchar())) f -= (ch == '-') << 1;
        while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch & 15), ch = getchar();
        x *= f;
    }
    template <typename T, typename ...L>
    il void read(T &x, L &...y) {read(x); read(y...);}
    template <typename T>
    il void write(T x) 
    {
        if (x < 0) ptc('-'), x = -x;
        if (x > 9) write(x / 10);
        ptc(x % 10 + '0');
    }
    template <typename T, typename ...L>
    il void write(T &x, L &...y) {write(x), ptc(' '); write(y...);}
}
using namespace ZeroTwo;
#define int ll
const int P = 998244353, N = 5e5 + 5;
int n, a[N], top, p;
pair <ll, ll> sk[N * 10];
double k(PII x, PII y) 
{
    return (x.second - y.second) * 1.0 / (x.first - y.first);
}
void insert(PII x)
{
    while (top > 1 && k(sk[top], sk[top - 1]) < k(sk[top - 1], x)) --top;
    sk[++top] = x;
}
double ans[N];
signed main() 
{
    // freopen("walk3.in", "r", stdin);
    read(n);
    insert({0, 0});
    R(i, 1, n)
    {
        read(a[i]);
        insert({i, a[i]});
    }
    insert({n + 1, 0});
    p = 0; 
    R(i, 1, n)
    {
        while (p + 1 <= top && sk[p + 1].first <= i) ++p;
        // cout << p << ' ' << sk[p].first << ' ' << sk[p].second << endl;
        if (sk[p].first == i) ans[i] = sk[p].second;
        ans[i] = (sk[p].second * (sk[p + 1].first - i) + sk[p + 1].second * (i - sk[p].first)) * 100000.0 / (sk[p + 1].first - sk[p].first);
    }
    int sum = 0;
    R(j, 1, n) printf("%.0f\n", floor(ans[j]));
    return 0;
}

标签:read,dfrac,top,Beam,il,USACO18DEC,Balance,void,define
From: https://www.cnblogs.com/cyyhcyyh/p/18018242

相关文章

  • IfcBeamTypeEnum
    IfcBeamTypeEnum类型定义此枚举定义不同预定义类型的梁,这些梁可以进一步指定IfcBeam或IfcBeamType。  IFC2x2中的新枚举类型。IFC4添加了枚举器HOLLOWCORE和SPANDREL。  EnumerationdefinitionConstantDescriptionBEAMAstandardbeamusuallyusedhorizontal......
  • (python)代码学习||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/pythondefbalanced_parens(n):'''Toconstructallthepossiblestringswithnpairsofbalancedparenthesesthisfunctionmakesuseofastackofitemswiththefoll......
  • (python)做题记录||2024.2.4||题目是codewars的【 All Balanced Parentheses】
    题目链接:https://www.codewars.com/kata/5426d7a2c2c7784365000783/python我的解决方案:defbalanced_parens(n):#Yourcodehere!used_l=[Falseforiinrange(n)]used_r=[Falseforiinrange(n)]answers=[]defprocess(answer):iflen(a......
  • Balanced Binary Tree
    SourceProblemStatementGivenabinarytree,determineifitisheight-balanced.Forthisproblem,aheight-balancedbinarytreeisdefinedasabinarytreeinwhichthedepthofthetwosubtreesofeverynodeneverdifferbymorethan1.ExampleGive......
  • A Balanced Problemset?
    引言题目链接:https://codeforces.com/contest/1925/problem/B思路由于最后的答案是x分解的全部数的gcd,所以该答案一定是x的因数,只要遍历x的因数k,那么该因数能将x分解成\(\frac{x}{k}\)份。若\(\frac{x}{k}\geqn\),则可将其构造成n组,gcd为k的答案,只需要找到......
  • CF1925B A Balanced Problemset? 题解
    CF1925B题解题目链接CodeforcesLuogu题目大意有一个长度为\(n\)且和为\(x\)的正整数序列,询问该序列可能的最大公因数。多测。简要思路首先先给出结论:最终的答案一定是\(x\)的因数。接下来我通过两种方法证明:一、类似于“更相减损法”一个序列的\(\gcd\)等于......
  • CF1924D Balanced Subsequences
    题意简述有\(n\)个左括号和\(m\)个右括号,求最长合法括号子序列长度为\(2k\)的括号序列的数量,对\(10^9+7\)取模。多组数据。\(T\le3\times10^3,n,m,k\le2\times10^3\)分析可能需要的前置知识:如何求一个字符串的最长合法括号子序列?维护一个括号栈,若遇到左括号则直接......
  • B. A Balanced Problemset
    原题链接忠告1:要学会计算时间复杂度!!忠告2:要学会抓事实,不要掉进题目直观模拟的陷阱里事实1.任意k个数的\(gcd\)一定可以是这k个数的最小值,这里以\(k=3\)举例假设\(gcd(a_1,a_2,a_3)=m\),则\(a_1=k_1m,a_2=k_2m,a_3=k_3m\),其中\(k_1,k_2,k_3\)都是整数那么可以通过......
  • CodeForces 1924D Balanced Subsequences
    洛谷传送门CF传送门发现去掉匹配的\(2k\)个括号后,剩下的串一定形如\())\ldots)((\ldots(\),其中右括号数量为\(a=m-k\),左括号数量为\(b=n-k\)。考虑把剩下的串像\())\ldots)\mid((\ldots(\)一样分成两半。枚举左半边加入了\(\frac{i}{2}\)对匹配,则......
  • 如何为Azure Kubernetes Services启用Internal Loadbalancer
    如何为AzureKubernetesServices启用InternalLoadbalancer熟悉AzureKubernetesServices(AKS)的小伙伴都知道,默认情况下,当我们创建AzureKubernetesServices群集时,创建的都是Public的AKS群集,也就是可以提供Internet访问的AKS群集。PublicAKS群集会默认附带一个Public类型的Load......