首页 > 其他分享 >CF1928D Lonely Mountain Dungeons

CF1928D Lonely Mountain Dungeons

时间:2024-02-12 17:23:29浏览次数:27  
标签:Mountain Lonely int dfrac 队伍 MAXN CF1928D MAX include

原题链接

设 \(F(n,m)\) 是将 \(n\) 个同种族的人放到 \(m\) 个队伍中可以获得的贡献。可以发现在同一个队伍中的人不能互相产生贡献,所以尽可能平均分配是最优的。

设 \(p=\lfloor \dfrac{n}{m}\rfloor,q=n\bmod m\),那么有 \(m-q\) 个队伍中有 \(p\) 个人,\(q\) 个队伍中有 \(p+1\) 个人,贡献是

\[F(n,m)=\dfrac{n(n+1)}{2}-(m-q)\times\dfrac{p(p+1)}{2}-q\times\dfrac{(p+1)(p+2)}{2} \]

设 \(f_j\) 是分成 \(j\) 个队伍可以获得的贡献,枚举每个种族 \(i\),使 \(f_j\gets f_j+F(c_i,min(j,c_i))\),相当于单点加与后缀加,差分前缀和就行了。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=2e5+10;
int T,n,b,z,c[MAXN],f[MAXN],MAX,ans;
inline int F(int x,int y)
{
    int p=x/y,q=x%y;
    return x*(x+1)/2-(y-q)*p*(p+1)/2-q*(p+1)*(p+2)/2;
}
inline void work()
{
    cin>>n>>b>>z;
    for(int i=1;i<=n;++i)
    {
        cin>>c[i];MAX=max(MAX,c[i]);
        for(int j=1;j<c[i];++j)
        {
            int cur=F(c[i],j)*b;
            f[j]+=cur,f[j+1]-=cur;
        }
        f[c[i]]+=F(c[i],c[i])*b;
    }
    for(int i=1;i<=MAX;++i)
        f[i]+=f[i-1],ans=max(ans,f[i]-(i-1)*z);
    for(int i=1;i<=MAX;++i) f[i]=0;
    cout<<ans<<'\n';MAX=ans=0;return ;
}
signed main()
{
    cin.tie(0),cout.tie(0);
    ios::sync_with_stdio(0);
    cin>>T;while(T--) work();
    return 0;
}

标签:Mountain,Lonely,int,dfrac,队伍,MAXN,CF1928D,MAX,include
From: https://www.cnblogs.com/int-R/p/18013982/CF1928D

相关文章

  • P1561 [USACO12JAN] Mountain Climbing S
    P1561[USACO12JAN]MountainClimbingS贪心思路首先我们设\(c_i\)为第\(i\)头牛上山后又下山的时间。那么有两种情况,我们分类讨论。第\(i\)头牛上到山顶时,第\(i-1\)头牛还未下到山脚。第\(i-1\)头牛下山完毕但第\(i\)头牛还在上山。那么\(c_i\)的公式......
  • CF1654G Snowy Mountain 题解
    题目链接点击打开链接题目解法很牛的题显然可以\(O(n)\)多源\(bfs\)求出\(h_i\)考虑从\(st\)开始最优的操作是什么?先延最短路径到\(p\),然后找到\(p\)的相邻点\(q\),满足\(h_p=h_q\),在\(p,q\)之间横跳,耗完所有动能,然后直接滑下去(不经过高度相同的点)为什么到\(p......
  • CF1322E - Median Mountain Range - 总结
    CF1322E-MedianMountainRange考虑分别对每个位置求出最后的数字。先枚举出这个数\(x\),并将\(a_i\gex\)的数设为\(1\),\(a_i<x\)的数设为\(0\),然后做题目中的操作,若为\(0\),则最终结果小于\(x\),为\(1\)则大于等于\(x\)。使用二分可以优化到\(\Omicron(n^2\log......
  • Kattis - A Complex Problem (The 2023 ICPC Rocky Mountain Regional Contest)
    IntroThiswasoneoftheproblemsIdidn'tdoduringtheregionalcontest.Oneofmyteammatessolvedit.ObservationTherearefewthingstonote.Firsttypeofnotation:subsetmeansthatA$\subset$B,buttherecanbecasesthatsubsetforms......
  • CERC2014 Mountainous landscape
    1ay1D。这是一个跑不过双\(\log\)的单\(\log\)做法。考虑双\(\log\)做法是怎么做的。令\(a_i(1\lei\len)\)为给定的\(x\)坐标递增的点序列,开一棵线段树维护区间上凸壳,第\(i\)次查询相当于在\([i+2,n]\)区间组成的点的上凸壳中,找到一个在经过\(a_i,a_{i+1}\)......
  • CF1852C Ina of the Mountain
    *2400https://codeforces.com/problemset/problem/1852/C如果没有\(\modk\)的限制的话,我们都会做,因为都是正数,那么\(\sum_i^nd_i>0\),因此,答案即为\(\sum[d_i>0]d_i\)。但是现在多了一个操作,即为区间加\(k\),那么转到差分数组就是\(d_l+k,d_r-k\),且该操作不花费。观察,差......
  • 【题解】CF1852C Ina of the Mountain
    我们先从题目的一部分入手。如果说,我们没有当一个数为\(0\)时,让这个数变成\(k\)的性质,我们如何求答案呢?很简单,在图上就是:绿色线段的长度加起来即为答案(本图中是\(6\))我们考虑很显然地,将一个数从\(0\)变为\(k\)即为将一个数一开始加上\(k\)我们如果要让第\(i\)列......
  • Codeforces Round 888 (Div. 3)G. Vlad and the Mountains(数据结构,图论)
    题目链接:https://codeforces.com/contest/1851/problem/G 大致题意: 给出n个点m条边的无向图,每个点有点权h【i】。从点i到点j会消耗h【j】-h【i】的能量,如果小于0,那么就是恢复对应绝对值的能量。 进行q次询问,每次询问包含起点s,终点t,能量e,能量在移动过程中不能小......
  • Codeforces Round 887 (Div. 1)C. Ina of the Mountain(数据结构,反悔贪心)
    题目链接:https://codeforces.com/problemset/problem/1852/C 题意: 给定一个长度为n的序列和正整数k; 每次可以选取任意一个区间,将区间内每个数减1; 如果出现一个数变成0,那么那个数变成k; 问至少操作多少次可以使得每个数变成k; 分析: 将每个数值抽象为对应高度的......
  • CF1423K Lonely Numbers
    思路因为对于\(\gcd(a,b)\),\(\fraca{\gcd(a,b)}\),\(\fracb{\gcd(a,b)}\)中\(a\)和\(b\)是等价的,可以交换的。所以我们先令\(a>b\)。令\(\gcd(a,b)=d\),因为\(\fraca{\gcd(a,b)}\)有除法,所以我们应该想办法去除除法,就同乘以一个\(d\),即\(d^2\),\(a\),\(b\)三条边。......