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的更多相关文章

  1. ARC145~152 题解

    比赛标号从大到小排列 . 因为博主比较菜所以没有题解的题都是博主不会做的 /youl ARC144 以前的比赛懒得写了 . 目录 AtCoder Regular Contest 152 B. Pass ...

  2. 表值函数与JS中split()的联系

    在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...

  3. join和split的区别

    join() 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. <script> var a=new Array(); a[0]="XHTML&quo ...

  4. c#使用Split分割换行符 \r\n

    c# 使用Split分割 换行符,方法如下(其余方法有空再添加):   string str = "aa" + "\r\n" + "bb"; ...

  5. JavaScript中的slice,splice,substr,substring,split的区别

    万恶的输入法,在sublime中会显示出繁体字,各位看官见谅. 1.slice()方法:该方法在数组和string对象中都拥有. var a = [1,2,3,4,5,6]; var s = 'thi ...

  6. split和join的用法

    第一点:split 直接举例子,比较直观, >>> f = 'www.baidu.com.cn' >>> f.split()['www.baidu.com.cn'] ...

  7. [LeetCode] Split Array Largest Sum 分割数组的最大值

    Given an array which consists of non-negative integers and an integer m, you can split the array int ...

  8. 字符串 中的split 与数组中的join

    关于基础,总是隔一段时间,就得看一次,要不不用总是忘,今天又重新看了,一下字符串对象的split,然后就想到了数组对象的join. var str='wo shi yi ge js'; var str ...

  9. split分割大文件--包含通过awk按规则分割文件到对应子文件

    当对一个大文件进行传输或者分析的时候,一个可以参考的办法是先通过split对文件进行分割,再对每个子文件进行处理,如果需要合并再进行合并. split函数可以按文件大小或者行数来进行分割. -a :  ...

  10. linux大文件分割 split命令

    inux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-][-b ][-C ][-l ][要切割的文件][输出文件名] 补充说明:split可将 ...

随机推荐

  1. C++11 result_of 学习

    简介 std::result_of<Function(Args...)>::type 简而言之就是推断 Function(Args...) 这个函数的返回值类型,用在模板函数中 参考链接 ...

  2. RestCloud API低代码开发平台,快速实现多表跨数据源API发布

    RestCloud API低代码开发平台本身已含有:注解式开发.API接口自动扫描.验证框架.授权框架.缓存框架.依赖注入框架.多数据源管理框架.多数据库事务管理框架等核心功能.相比于传统API开发模 ...

  3. luoguP1163-二分

    银行贷款 题目链接:https://www.luogu.com.cn/problem/P1163 本题思路: orz公式 数学公式给出n,m,k,求贷款者向银行支付的利率 p,使得: $ \sum_{ ...

  4. MySQL 22 MySQL有哪些“饮鸩止渴”提高性能的方法?

    有时候,在业务高峰期,生产环境的MySQL压力太大,没法正常响应,需要短期内.临时性地提升一些性能.本文就来讲讲一些临时方法,并着重说它们可能存在的风险. 短连接风暴 正常的短连接模式是连接到数据库后 ...

  5. Python 潮流周刊#112:欢迎 AI 时代的编程新人

    本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  6. redis协议以及淘汰策略

  7. CentOS 7部署Kerberos的实战详解

    以下是CentOS 7部署Kerberos的实战详解,整合了多篇权威指南的核心步骤与关键配置要点: ​​一.环境准备​​ ​​系统要求​​ CentOS 7及以上版本,至少2GB内存. ​​时钟同步​ ...

  8. King of Karaoke ZOJ - 4025

    https://vjudge.net/problem/ZOJ-4025/origin https://vjudge.net/contest/399385#problem/B It's Karaoke ...

  9. vue2.0插槽的使用

    Vue2.0插槽的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  10. 珍客CRM是什么,CRM功能有哪些,营销服一体化具体指的是什么?

    珍客CRM系统是面向中大型企业销售管理的专业CRM解决方案. 珍客CRM功能有:通过全渠道智能获客.集中管理客户信息.标准化销售流程.搭建协同平台.分析客户行为数据.沉淀销售知识库.全场景AI辅助:具 ...