Split and Maximize
Split and Maximize
根据常识可知,肯定是 \(\sum_{i=1}^n 2i(2i-1)\) 最大,通俗来讲就是相邻两个数相乘是最优的。
要达到这个得分,我们应该将 \(2i\) 和 \(2i-1\) 一个分给 \(A\),一个分给 \(B\),并且要保证先后顺序一样,保证 \(2i\) 可以与 \(2i-1\) 配对。
把 \(2i\) 看作 (,把 \(2i-1\) 看作 ),答案一定是一个合法的括号序列。
长度为 \(2n\) 的合法括号序列个数可以用卡特兰数解决,等于 \(\dbinom{2n}{n}-\dbinom{2n}{n-1}=\dfrac{(2n)!}{n!\times n!}-\dfrac{(2n)!}{(n+1)!\times (n-1)!}=\dfrac{(n+1)(2n)!}{n!\times (n+1)!}-\dfrac{n(2n)!}{(n+1)!\times n!}=\dfrac{(2n)!}{(n+1)!\times n!}\)。
对于一个合法的括号序列,由于 ( 两两意义不同,答案需乘上 \(n!\) 表示 ( 的排列数,一旦 ( 的顺序确定了,) 的顺序也唯一了,因此不需要讨论 ) 的排列数。因为 \(2i\) 和 \(2i-1\) 的位置可以调换,所以答案应该再乘上 \(2^n\)。
最终答案是 \(\dfrac{(2n)!}{(n+1)!\times n!}\times n!\times 2^n\)。
时间复杂度 \(O(n)\)。
Code
#include<bits/stdc++.h>
#define sf scanf
#define pf printf
using namespace std;
typedef long long ll;
const int N=2e5+3,mod=998244353;
int n;
ll jc(ll a){
ll s=1;
for(int i=1;i<=a;i++){
s=s*i%mod;
}
return s;
}
ll ksm(ll a,ll b){
ll s=1;
while(b){
if(b&1) s=s*a%mod;
a=a*a%mod;
b>>=1;
}
return s;
}
int main(){
sf("%d",&n);
pf("%lld\n",jc(2*n)*ksm(jc(n)*jc(n+1)%mod,mod-2)%mod*jc(n)%mod*ksm(2,n)%mod);
}
Split and Maximize的更多相关文章
- ARC145~152 题解
比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...
- 表值函数与JS中split()的联系
在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...
- join和split的区别
join() 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. <script> var a=new Array(); a[0]="XHTML&quo ...
- c#使用Split分割换行符 \r\n
c# 使用Split分割 换行符,方法如下(其余方法有空再添加): string str = "aa" + "\r\n" + "bb"; ...
- JavaScript中的slice,splice,substr,substring,split的区别
万恶的输入法,在sublime中会显示出繁体字,各位看官见谅. 1.slice()方法:该方法在数组和string对象中都拥有. var a = [1,2,3,4,5,6]; var s = 'thi ...
- split和join的用法
第一点:split 直接举例子,比较直观, >>> f = 'www.baidu.com.cn' >>> f.split()['www.baidu.com.cn'] ...
- [LeetCode] Split Array Largest Sum 分割数组的最大值
Given an array which consists of non-negative integers and an integer m, you can split the array int ...
- 字符串 中的split 与数组中的join
关于基础,总是隔一段时间,就得看一次,要不不用总是忘,今天又重新看了,一下字符串对象的split,然后就想到了数组对象的join. var str='wo shi yi ge js'; var str ...
- split分割大文件--包含通过awk按规则分割文件到对应子文件
当对一个大文件进行传输或者分析的时候,一个可以参考的办法是先通过split对文件进行分割,再对每个子文件进行处理,如果需要合并再进行合并. split函数可以按文件大小或者行数来进行分割. -a : ...
- linux大文件分割 split命令
inux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-][-b ][-C ][-l ][要切割的文件][输出文件名] 补充说明:split可将 ...
随机推荐
- C++11 result_of 学习
简介 std::result_of<Function(Args...)>::type 简而言之就是推断 Function(Args...) 这个函数的返回值类型,用在模板函数中 参考链接 ...
- RestCloud API低代码开发平台,快速实现多表跨数据源API发布
RestCloud API低代码开发平台本身已含有:注解式开发.API接口自动扫描.验证框架.授权框架.缓存框架.依赖注入框架.多数据源管理框架.多数据库事务管理框架等核心功能.相比于传统API开发模 ...
- luoguP1163-二分
银行贷款 题目链接:https://www.luogu.com.cn/problem/P1163 本题思路: orz公式 数学公式给出n,m,k,求贷款者向银行支付的利率 p,使得: $ \sum_{ ...
- MySQL 22 MySQL有哪些“饮鸩止渴”提高性能的方法?
有时候,在业务高峰期,生产环境的MySQL压力太大,没法正常响应,需要短期内.临时性地提升一些性能.本文就来讲讲一些临时方法,并着重说它们可能存在的风险. 短连接风暴 正常的短连接模式是连接到数据库后 ...
- Python 潮流周刊#112:欢迎 AI 时代的编程新人
本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- redis协议以及淘汰策略
- CentOS 7部署Kerberos的实战详解
以下是CentOS 7部署Kerberos的实战详解,整合了多篇权威指南的核心步骤与关键配置要点: 一.环境准备 系统要求 CentOS 7及以上版本,至少2GB内存. 时钟同步 ...
- King of Karaoke ZOJ - 4025
https://vjudge.net/problem/ZOJ-4025/origin https://vjudge.net/contest/399385#problem/B It's Karaoke ...
- vue2.0插槽的使用
Vue2.0插槽的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 珍客CRM是什么,CRM功能有哪些,营销服一体化具体指的是什么?
珍客CRM系统是面向中大型企业销售管理的专业CRM解决方案. 珍客CRM功能有:通过全渠道智能获客.集中管理客户信息.标准化销售流程.搭建协同平台.分析客户行为数据.沉淀销售知识库.全场景AI辅助:具 ...