【2021 ICPC Asia Jinan 区域赛】 C Optimal Strategy推公式-组合数-逆元快速幂
题目链接 题目详情 (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推公式-组合数-逆元快速幂的更多相关文章
- ICPC 2018 焦作区域赛
// 2019.10.7 练习赛 // 赛题来源:2018 ICPC 焦作区域赛 // CF链接:http://codeforces.com/gym/102028 A Xu Xiake in Hena ...
- 2021ICPC网络赛第一场部分题解-The 2021 ICPC Asia Regionals Online Contest (I)
写在前面 本来应该6题的,结果不知道哪个铸币发了H的clar,当即把我们的思路转向三维几何上.当时我们还在想这三维计算几何的正确率有点太高了还在感叹ICPC选手的含金量,直到赛后我才知道这H题的铸币出 ...
- 2017 ICPC/ACM 沈阳区域赛HDU6228
Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- 2017 ICPC/ACM 沈阳区域赛HDU6223
Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java ...
- (最新)2019年ICPC东亚地区-区域赛赛站网络赛以及现场赛时间安排
- 第 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 ...
- 计蒜客模拟赛D2T1 蒜头君的兔子:矩阵快速幂
题目链接:https://nanti.jisuanke.com/t/16442 题意: 有个人在第一年送了你一对1岁的兔子.这种兔子刚生下来的时候算0岁,当它在2~10岁的时候,每年都会生下一对兔子, ...
- 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 ...
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
随机推荐
- 使用ipmitool工具来使用串口连接远程主机
https://www.ibm.com/developerworks/cn/linux/l-ipmi/index.html ipmitool -H 9.13.2.213 -U root -P xxxx ...
- 寻路算法之A*算法详解
前言 在实际开发中我们会经常用到寻路算法,例如MMOARPG游戏魔兽中,里面的人物行走为了模仿真实人物行走的体验,会选择最近路线达到目的地,期间会避开高山或者湖水,绕过箱子或者树林,直到走到你所选定的 ...
- bzoj5315/luoguP4517 [JSOI2018]防御网络(仙人掌,dp)
bzoj5315/luoguP4517 防御网络(仙人掌,dp) bzoj Luogu 题目描述略(太长了) 题解时间 本题和斯坦纳树无关. 题面保证了是一个仙人掌...? 但这个环之间甚至交点都没有 ...
- HTTP1.0和HTTP1.1和HTTP2.0的区别
1 HTTP1.0和HTTP1.1的区别1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求 ...
- 【Java面试宝典】什么情况下会发生栈内存溢出?
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常. 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常.
- BIO、NIO、AIO的区别
一.基本概念 1.BIO:同步阻塞IO 2.NIO:同步非阻塞IO 3.AIO:异步阻塞IO IO操作包括两部分,发起IO请求.IO数据读写.阻塞非阻塞主要针对线程发起IO请求之后是否立即返回来定义的 ...
- ssl免密登录(centos6)
1.首先执行ll -a查看是否有隐藏文件.ssh,如果没有,需要执行ssh localhost登录以下即可 cd ~/.ssh 2.生成秘钥: 可查看https://hadoop.apache.org ...
- 详解Mysql事务隔离级别与锁机制
一.概述 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写. 胀读和不可重复读.幻读这些问题. 这些问题的本质都是数据库的多事务并 ...
- scrapy 如何链接有密码的redis scrapy-redis 设置redis 密码 scrapy-redis如何为redis配置密码
# 使用scrapy_redis的调度器SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 使用scrapy_redis的去重机制DUP ...
- 开发一个自己的 CSS 框架(四)
这一节,我们来讲规矩,谈网格,做人可以不要脸,不讲规矩,不讲道理(特指傲娇兽),但底线还是要有的,如同网格一样,不能超出. jeet 这里我们别人封装好的模块,不过呢,我们也会详细介绍一下原理.首先我 ...