题目链接 题目详情 (pintia.cn)

题目

题意

有n个物品在他们面前,编号从1自n.两人轮流移走物品。在移动中,玩家选择未被拿走的物品并将其拿走。当所有物品被拿走时,游戏就结束了。任何一个玩家的目标是最大化他们拿走的物品的价值之和。

二人都足够聪明,有多少可能的游戏过程?结果取模998244353.

如果存在一些整数相等,但是下标不一样,算为两种方式。

题解

此题可以抽象为有序序列,第一个位置第一次被拿走,第二个位置第二次被拿走,后者亦然,求有多少种符合条件的序列

1. 最大值若为单数个,第一个人一定拿走,对于种数并没有贡献

2. 最大值若为双数个,第一个人拿走一个,后面人一定也要拿走一个

3. 每次拿完,都可以抽象为前两种。

以下为用高中排列组合思考问题:

AC代码

组合数用逆元求,如果按正常阶乘算,若 被除数取模过,那么结果也就不一样了

// #include<bits/stdc++.h>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <vector> using namespace std; typedef long long LL;
typedef pair<int,int> PII; const int N = 1e6+10;
const LL mod = 998244353;
int st[N];
LL fact[N], infact[N]; LL qmi(LL x, LL k)//快速幂
{
LL res = 1;
while(k)
{
if(k&1)
res = (LL)res * x %mod;
k >>= 1;
x = (LL)x * x % mod;
}
return res;
}
void init(int n)
{
fact[0] = 1, infact[0] = 1;
for(int i = 1; i <= n; i ++)
{
fact[i] = fact[i-1]*i%mod;//n的阶乘
infact[i] = infact[i-1]*qmi((LL)i, mod-2)%mod;//逆元
}
return;
}
LL zuhe(int n, int m)//求组合数
{
return fact[n] * infact[n-m] %mod* infact[m]%mod;
}
int main(){
vector<PII> a;
int n;
cin >> n;
init(n);
int idx = 0;
for(int i = 0; i < N; i ++) st[i] = -1;
for(int i = 0; i < n; i ++)
{
int x;
cin >> x;
if(st[x]>=0) a[st[x]].second ++;//记录每个数出现了几次
else
{
a.push_back({x, 1});
st[x] = idx ++;
}
}
sort(a.begin(), a.end());
int sum = 0;
LL res = 1;
for(int i = a.end()-a.begin()-1; i >= 0; i --)sum+=a[i].second; //数学公式实现过程
for(int i = a.end()-a.begin()-1; i >= 0; i --)
{
sum -= a[i].second;
int c = a[i].second;
if(c >= 2)
res = res * fact[c]%mod * zuhe((sum + c/2), c/2)%mod; }
cout << res <<endl; return 0;
}

【2021 ICPC Asia Jinan 区域赛】 C Optimal Strategy推公式-组合数-逆元快速幂的更多相关文章

  1. ICPC 2018 焦作区域赛

    // 2019.10.7 练习赛 // 赛题来源:2018 ICPC 焦作区域赛 // CF链接:http://codeforces.com/gym/102028 A Xu Xiake in Hena ...

  2. 2021ICPC网络赛第一场部分题解-The 2021 ICPC Asia Regionals Online Contest (I)

    写在前面 本来应该6题的,结果不知道哪个铸币发了H的clar,当即把我们的思路转向三维几何上.当时我们还在想这三维计算几何的正确率有点太高了还在感叹ICPC选手的含金量,直到赛后我才知道这H题的铸币出 ...

  3. 2017 ICPC/ACM 沈阳区域赛HDU6228

    Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  4. 2017 ICPC/ACM 沈阳区域赛HDU6223

    Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java ...

  5. (最新)2019年ICPC东亚地区-区域赛赛站网络赛以及现场赛时间安排

  6. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)-L Bit Sequence

    题意 给你两个数l,m,大小为m的数组a,求[0,l]之间满足以下条件的数x的个数: 对于任何i输入[0,m-1],f(x+i)%2=a[i]:f(k):代表k在二进制下1的个数 m的范围<=1 ...

  7. 计蒜客模拟赛D2T1 蒜头君的兔子:矩阵快速幂

    题目链接:https://nanti.jisuanke.com/t/16442 题意: 有个人在第一年送了你一对1岁的兔子.这种兔子刚生下来的时候算0岁,当它在2~10岁的时候,每年都会生下一对兔子, ...

  8. ACM学习历程—HDU5490 Simple Matrix (数学 && 逆元 && 快速幂) (2015合肥网赛07)

    Problem Description As we know, sequence in the form of an=a1+(n−1)d is called arithmetic progressio ...

  9. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

随机推荐

  1. Docker——基本组成

    Docker架构图 客户端(client):执行命令 服务器(docker_host): 镜像(image):类似于一个模板,通过这个模板来创建容器中 容器(container):利用容器技术,独立运 ...

  2. Linux下编译安装配置MariaDB数据库

    说明:操作系统:CentOS 6.6  64位MariaDB版本:mariadb-5.5.33aMariaDB数据库存放目录:/data/mysql准备:一.配置防火墙,开启3306端口vi /etc ...

  3. K8S原来如此简单(四)Service+Ingress

    上一篇我们通过deployment实现了pod的横向扩展,但是仍然不能负载,也不能对外提供服务,现在我们来看看如何通过k8s实现负载与外网访问 Service service为一组pod提供一个统一的 ...

  4. 绕过WAF进行常见Web漏洞利用

    前言 本文以最新版安全狗为例,总结一下我个人掌握的一些绕过WAF进行常见WEB漏洞利用的方法. PS:本文仅用于技术研究与讨论,严禁用于任何非法用途,违者后果自负,作者与平台不承担任何责任 PPS:本 ...

  5. Tomcat启动时shell窗口乱码解决方法

    tomcat/conf/目录下,修改logging.properties java.util.logging.ConsoleHandler.encoding = utf-8 更改为 java.util ...

  6. Java 中如何将字符串转换为整数?

    String s="123"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intValue();

  7. PowerDesigner生成MySQL脚本,表和字段进行转义

    打开Power Designer数据库建模工具,软件基本信息如下 如果PowerDesigner内置的(table_option)表物理操作没有,请看以下步骤 打开 Edit Current DBMS ...

  8. spring boot 自动装配的原理

    参考: https://blog.csdn.net/Dongguabai/article/details/80865599.如有侵权,请联系本人删除! 入口: import org.springfra ...

  9. 学习Apache(四)

    介绍 Apache HTTP 服务器被设计为一个功能强大,并且灵活的 web 服务器, 可以在很多平台与环境中工作.不同平台和不同的环境往往需要不同 的特性,或可能以不同的方式实现相同的特性最有效率. ...

  10. 修改openstack Centos镜像的默认用户的密码

    Ubuntu官方提供的OpenStack镜像是用Key来登录的,太麻烦,可以改成用密码来登录. 修改image的工具叫:guestfish. yum install libguestfs-tools ...