CF1380G Circular Dungeon

看懂样例就能做。

虽然我瞪了 20 分钟 菜是原罪

首先可以将从每一个点出发所能获得的价值相加,再除以 \(n\) 就可以得到价值的期望。

所以问题转化为使从每一个点出发所能获得的价值之和最小。

有一个显而易见的结论:我们一定会将价值前 \(k\) 大的宝箱变成假宝箱。

为了尽可能减小价值之和,这些假宝箱一定不会相邻,于是这 \(k\) 个假宝箱把这个环分成了 \(k\) 段。

为了方便起见,你可以把环断开成链,以某个假宝箱为断点,每一段都是完整的。

那么问题就变成了将真宝箱分为 \(k\) 段,使得从每一个点出发所能获得的价值之和最小。

显然在同一段的点只能获得自己这一段中宝箱的价值。

考虑在同一段的每个点出发所能获得的总价值,设这一段宝箱中第 \(i\) 个宝箱的价值为 \(v_i\)。

则有

\[sum=\sum_{i=1}^niv_i
\]

那么显然这一段中的宝箱价值应按照降序排序才能保证总价值最小。

我们刚才考虑了一段的总价值,现在我们从总体上看,怎样能够使得价值最小?

注意到每一段的第一个数会对答案产生一次贡献,每一段的第二个数会对答案产生二次贡献,...,也就是说我们需要保证每一段的第一个数尽可能大,这样对答案的贡献才会小。

即设一共有 \(k\) 段,我们可以将真宝箱中价值前 \(k\) 大的宝箱放在每一段的第一个,剩余真宝箱中的前 \(k\) 大放在每一段的第二个,以此类推,不足 \(k\) 个可以看作用 \(0\) 补齐。

这样这个题就做完了。

总时间复杂度为 \(O(n\log_2n)\)。

(其实你看我说这么大一堆代码超简单的)

#include<bits/stdc++.h>
using namespace std;
const int p=998244353;
const int maxn=3e5+5;
int a[maxn],sum[maxn];
int ksm(int a,int b,int p){
int ans=1;
while(b){
if(b&1) ans=1ll*ans*a%p;
b>>=1,a=1ll*a*a%p;
}
return ans;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n;cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
for(int i=1;i<=n;++i) sum[i]=(sum[i-1]+a[i])%p;
int inv=ksm(n,p-2,p);
for(int k=1;k<=n;++k){
int ans=0;
for(int j=0,i=0;i<n;++j,i+=k)
ans=(ans+1ll*j*(sum[min(n,i+k)]-sum[i]+p)%p)%p;
cout<<1ll*ans*inv%p<<' ';
}
return 0;
}

「CF1380G」 Circular Dungeon的更多相关文章

  1. 「CF52C」Circular RMQ

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description You are given circular array \(a_0, a_ ...

  2. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  3. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  4. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  5. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  6. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  7. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

随机推荐

  1. Selenium3自动化测试【18】XPath定位元素(2)

    层级与属性结合定位 如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己.举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为&quo ...

  2. [leetcode] 875. 爱吃香蕉的珂珂(周赛)

    875. 爱吃香蕉的珂珂 这题时间要求比较严格... 首先,将piles排序,然后二分查找. 总之,答案K肯定位于piles[?]piles[?+1]或者1piles[0]之间 所以我们先二分把?找到 ...

  3. Oracle数据库使用pfile启动还是spfile启动---oracle

    查看数据库使用pfile启动还是spfile启动 9i版本以后,一般是使用spfile启动,但前提是有这个spfile文件,如果同时存在spfile和pfile文件,会优先选择spfile模式启动数据 ...

  4. VB 老旧版本维护系列---兜兜转转有点晕:从服务器通过URL不中转保存的下载

    从服务器通过URL不中转保存的下载 首先引用System.dll 然后新开一个页面,空的,在后台Page_Load方法里写   Dim docPath As String ="" ...

  5. LeetCode:322. 零钱兑换

    链接:https://leetcode-cn.com/problems/coin-change/ 标签:动态规划.完全背包问题.广度优先搜索 题目 给定不同面额的硬币 coins 和一个总金额 amo ...

  6. ubuntu 如何更改 grub 界面主题

    ubuntu 如何更改 grub 界面主题 安装 Liunx 系统的人都知道,系统引导是通过 grub 去引导的,但是 grub 这个界面就很单调,大概是这样子的 这肯定不符合我们潮流青年的审美的~ ...

  7. ESCMScript(1)let和const

    1.let命令 基本语法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 1 var b = 2 console ...

  8. 在js中使用moment将秒转换为多少天多少小时多少分多少秒

    let x = 2703750;//单位是秒 var d = moment.duration(x, 'seconds'); console.log(Math.floor(d.asDays()) + ' ...

  9. cos中的文件结构(DF/EF/MF/FID/AID/SFI..)

    转载自:https://blog.csdn.net/Enjoy_endless/article/details/75108349 刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不 ...

  10. R语言--读取文件(数据输入)

    1 数据的输入 1.1 键盘输入 首先新建一张空表: dat<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0)) ...