题目链接 题目详情 (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. JavaWeb 10_Filter过滤器

    一.什么是Filter? 1.Filter 过滤器它是JavaWeb的三大组件之一-.三大组件分别是: Servlet 程序.Listener 监听器.Filter 过滤器2.Filter 过滤器它是 ...

  2. Activemq特性之持久化--LevelDB特性

    LevelDB持久性适配器使用LevelDB作为高性能的消息存储.它是一个基于文件的存储库,它使用了Google的LevelDB,将索引保存到包含消息的日志文件中.它经过优化,提供了比KahaDB更快 ...

  3. 时序数据库之InfluxDB的基本操作

    1.进入Influxdb的客户端 [root@activity_sentinel ~]# influx 2.数据库的操作 显示所有的数据库名 > show databases name: dat ...

  4. python3 爬虫4--解析链接

    1.urlparse() 属于urllib.parse 在urlparse世界里面,一个标准的URL链接格式如下 scheme://nrtlooc/path;paramters?query#fragm ...

  5. web端,app端,小程序端测试差异详解

    前置解释:1.单纯从功能测试的层面上来讲的话,APP 测试.web 测试和H5测试在流程和功能测试上是没有区别的2.Web项目或pc项目都是在电脑上进行测试的.常见的PC项目架构有BS架构和CS架构的 ...

  6. Kafka 判断一个节点是否还活着有那两个条件?

    (1)节点必须可以维护和 ZooKeeper 的连接,Zookeeper 通过心跳机制检查每 个节点的连接 (2)如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太 ...

  7. 发现程序美----while+for冒泡实现的

    思想记录: 每一轮回的冒泡都将产生一个最大值,其后每次循环次数都将少一次,因为每次都会确定一个最大值. private void method(){ int[] list = {10,7,8,4,7, ...

  8. SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常

    异常内容: Caused by: java.lang.IllegalStateException: In the composition of all global method configurat ...

  9. synchronized的原理

    synchronized的使用 synchronized是一个java中的关键字,是基于JVM层面的,用于保证java的多线程安全,它具有四大特性,可用于完全替代volatile: 原子性:所谓原子性 ...

  10. 关于XML文件

    关于xml文件没有提示(eclipse) 点我