「CF1380G」 Circular Dungeon
CF1380G Circular Dungeon
看懂样例就能做。
虽然我瞪了 20 分钟 菜是原罪
首先可以将从每一个点出发所能获得的价值相加,再除以 \(n\) 就可以得到价值的期望。
所以问题转化为使从每一个点出发所能获得的价值之和最小。
有一个显而易见的结论:我们一定会将价值前 \(k\) 大的宝箱变成假宝箱。
为了尽可能减小价值之和,这些假宝箱一定不会相邻,于是这 \(k\) 个假宝箱把这个环分成了 \(k\) 段。
为了方便起见,你可以把环断开成链,以某个假宝箱为断点,每一段都是完整的。
那么问题就变成了将真宝箱分为 \(k\) 段,使得从每一个点出发所能获得的价值之和最小。
显然在同一段的点只能获得自己这一段中宝箱的价值。
考虑在同一段的每个点出发所能获得的总价值,设这一段宝箱中第 \(i\) 个宝箱的价值为 \(v_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的更多相关文章
- 「CF52C」Circular RMQ
更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description You are given circular array \(a_0, a_ ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 「2014-3-17」C pointer again …
记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...
随机推荐
- Selenium3自动化测试【18】XPath定位元素(2)
层级与属性结合定位 如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己.举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为&quo ...
- [leetcode] 875. 爱吃香蕉的珂珂(周赛)
875. 爱吃香蕉的珂珂 这题时间要求比较严格... 首先,将piles排序,然后二分查找. 总之,答案K肯定位于piles[?]piles[?+1]或者1piles[0]之间 所以我们先二分把?找到 ...
- Oracle数据库使用pfile启动还是spfile启动---oracle
查看数据库使用pfile启动还是spfile启动 9i版本以后,一般是使用spfile启动,但前提是有这个spfile文件,如果同时存在spfile和pfile文件,会优先选择spfile模式启动数据 ...
- VB 老旧版本维护系列---兜兜转转有点晕:从服务器通过URL不中转保存的下载
从服务器通过URL不中转保存的下载 首先引用System.dll 然后新开一个页面,空的,在后台Page_Load方法里写 Dim docPath As String ="" ...
- LeetCode:322. 零钱兑换
链接:https://leetcode-cn.com/problems/coin-change/ 标签:动态规划.完全背包问题.广度优先搜索 题目 给定不同面额的硬币 coins 和一个总金额 amo ...
- ubuntu 如何更改 grub 界面主题
ubuntu 如何更改 grub 界面主题 安装 Liunx 系统的人都知道,系统引导是通过 grub 去引导的,但是 grub 这个界面就很单调,大概是这样子的 这肯定不符合我们潮流青年的审美的~ ...
- ESCMScript(1)let和const
1.let命令 基本语法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 1 var b = 2 console ...
- 在js中使用moment将秒转换为多少天多少小时多少分多少秒
let x = 2703750;//单位是秒 var d = moment.duration(x, 'seconds'); console.log(Math.floor(d.asDays()) + ' ...
- cos中的文件结构(DF/EF/MF/FID/AID/SFI..)
转载自:https://blog.csdn.net/Enjoy_endless/article/details/75108349 刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不 ...
- R语言--读取文件(数据输入)
1 数据的输入 1.1 键盘输入 首先新建一张空表: dat<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0)) ...