sincerit Protoss and Zerg(快速幂求组合)
链接:https://ac.nowcoder.com/acm/contest/303/H
来源:牛客网
题目描述
1v1,是星际争霸(StarCraft)中最常见的竞技模式。
tokitsukaze进行了n场1v1。在每一场的1v1中,她都有星灵(Protoss)和异虫(Zerg)两个种族可以选择,分别有a个单位和b个单位。因为tokitsukaze不太擅长玩人类(Terran),所以她肯定不会选择人类。
对于每一场1v1,玩家只能控制己方单位。也就是说,如果选择虫族,那么只能控制虫族单位,如果玩家选择星灵,那么只能控制星灵单位。
在n场1v1中,假设第i场,有ai个虫族单位,和bi个星灵单位。tokitsukaze可以在一场1v1中,任选一种种族进行游戏。如果选择了虫族,那么在这场游戏中,可以选择出兵1到ai个单位。那么同理,如果选择了星灵,那么在这场游戏中,可以选择出兵1到bi个单位。
假设所有异虫单位互不相同,所有星灵单位也互不相同,那么请问tokitsukaze打完这n场1v1,出兵的总方案数是多少,由于答案很大,所以输出答案mod 998244353 后的结果。
注意:若两个方案,有其中一个单位不同,即视为不相同。
输入描述:
第一行包含一个T(T≤10),表示T组数据。
对于每组数据:
第一行包含一个正整数n(1≤n≤100000)。
接下来n行,第i行包含两个整数ai,bi(1≤ai,bi≤10^9),表示第i场1v1,有ai个异虫单位,和bi个星灵单位。
输出描述:
对于每组数据,输出一行,表示mod 998244353后的答案。
示例1
输入
复制
1
2
1 2
2 1
输出
复制
16
说明
第一组样例:
对于第一场对局,tokitsukaze可以选择的虫族兵种有一个,并且将其编号为1,tokitsukaze可以选择的星灵兵种有两个,将其编号为1,2。所以tokitsukaze有四种可供选择的游戏方案:
1、选择虫族,并且派出虫族1号兵种。
2、选择星灵族,并且派出星灵族1号兵种。
3、选择星灵族,并且派出星灵族2号兵种。
4、选择星灵族,并且派出星灵族1,2号兵种。
对于第二场对局,tokitsukaze可以选择的虫族兵种有两个,并且将其编号为1,2,tokitsukaze可以选择的星灵兵种有一个,将其编号为1。所以tokitsukaze有四种可供选择的游戏方案:
1、选择虫族,并且派出虫族1号兵种。
2、选择虫族,并且派出虫族2号兵种。
3、选择虫族,并且派出虫族1,2号兵种。
4、选择星灵族,并且派出星灵族1号兵种。
两场对局是相互独立的事件,所以两轮游戏的出兵方案总数为4*4(mod 998244353)=16种。
假设要派出的兵种有n种
那么可以有多少种组合呢, 可以看成有n个人,每个人都有两种选择(被派出和不被派出)
那么就有2^n这么多种组合情况,除去一个全部不派出的情况就保证了至少有一个人被派出
所以就有2^n-1种情况
#include <stdio.h>
#include <cstring>
typedef long long ll;
const ll MOD = 998244353;
const ll N = 1e5 + 5;
ll spow(ll x, ll n) {x %= MOD;ll ans = 1;while (n) {if (n&1) ans = (ans * x) % MOD;n >>= 1;x = (x * x) % MOD;}return ans%MOD;
}
int main() {int t;scanf("%d", &t);while (t--) {ll n, a, b;scanf("%lld", &n);ll ans = 1, sum = 0;for (int i = 1; i <= n; i++) {scanf("%lld %lld", &a, &b);a = spow(2, a) - 1;b = spow(2, b) - 1;ans = (ans * (a+b)) % MOD;}printf("%lld\n", ans);}return 0;
}
sincerit Protoss and Zerg(快速幂求组合)相关推荐
- 矩阵快速幂求大斐波那契poj3070(java)
题目链接 核心思想为: 从右往左.可以一直递推,然后到最后一项,然后快速幂求矩阵,矩阵最终的结果就是所求结果. 更新:java的矩阵通用乘法可以表示为,可以将下列代码替换道ac代码中: import ...
- 矩阵快速幂求斐波那契数列(初学整理)
参考文章: http://blog.csdn.net/u013795055/article/details/38599321 http://blog.csdn.net/g_congratulation ...
- 876. 快速幂求逆元
Powered by:NEFU AB-IN Link 文章目录 876. 快速幂求逆元 题意 思路 代码 876. 快速幂求逆元 题意 给定 n 组 ai,pi,其中 pi 是质数,求 ai 模 pi ...
- 大数问题(循环求余/快速幂求余/快速幂问题)
大数问题 1.大数求余问题 解题思路 1.1循环求余O(n)O(n)O(n) 1.2.快速幂求余O(logn)O(\log n)O(logn) 2.快速幂问题 解题思路 1.大数求余问题 在仅使用i ...
- 利用矩阵快速幂求斐波那契数列
我们知道如果用记忆化搜索逐项递推可以将复杂度降低到O(n),但是对于更大规模的输入,这个算法效率还是不够高,那么我们考虑更高效的算法: 二阶递推:f(n+2)=(1 1) f(n+1) f(n+1) ...
- ZYH的斐波那契数列【线段树动态开点+矩阵快速幂求斐波那契】
描述 ZYH最近研究数列研究得入迷啦! 现在有一个斐波拉契数列(f[1]=f[2]=1,对于n>2有f[n]=f[n-1]+f[n-2]), 但是斐波拉契数列太简单啦,于是ZYH把它改成了斐波拉 ...
- 数据结构与算法:快速幂——求幂运算 O(logN)
前言:普通的求幂问题,相信大家已经屡见不鲜,无非就是 纯暴力 解法,或者直接调用公式:Math.Pow(底数, 指数) 一步得出.但这两种算法只能使得时间复杂度保持在 O(n).而且公式一步的得往往 ...
- HDU2035人见人爱A^B(快速幂求余)
要求A^B的后三位整数,每次乘积后再对1000取余即可,其中第一种为快速幂. #include <iostream> #include <cmath> using namesp ...
- 2017.3.25 矩阵快速幂 求斐波那契数列第n项
对于矩阵快速幂只要知道矩阵取模.乘法原理就完全可以手推 口诀:行 列 被计算的行列的交点是结果对应的位置: 剩下的就是推矩阵: 其实根据矩阵的方程意义就很好推了: 码: #includ ...
最新文章
- 【Android】EditText的一个问题
- c语言如何快速看懂别人的程序,探究如何快速看懂单片机程序方法
- 搭建scala 开发spark程序环境及实例演示
- 用java做一个管理系统难吗_想知道怎样用Java做出一个学生管理系统,课一直听得一知半解。现在考试啥都不会?...
- 局域网内计算机无法互相访问,轻松几招解决局域网不能互相访问故障
- crt脚本怎么添加等待时间_如何在重启或启动时执行命令或脚本 | Linux 中国
- 完全开源的杀病毒软件ClamAV
- 雷神开机logo更改_笔记本电脑开机LOGO太丑?大神教你来更换
- 华硕B365能装服务器系统吗,原生支持Win7,大师级B365主板来了! 华硕PRIME B365M-A主板深度体验-华硕主板bios设置图解...
- C++银行管理系统源代码
- 互联网盈利模式,网络策划运营模式
- Vim配置#pathogen插件管理工具
- OllyDbg笔记-Olly Advanced插件使用
- 微信小程序做图片压缩
- Mybatis 报The error occurred while handling results
- Exiting intel PXE ROM.Operating system not found
- 微型计算机pcu,浅谈丰田紧凑型HV动力控制单元(下)
- 互盾科技:日日行,不怕千万里;常常做,不怕千万事
- 人来人走----超级表格创业大街历险记
- 【算法基础十】作为程序员,是什么让你坚持不懈地学习?
热门文章
- IDEA : 2022.1 版本更新内容一览
- 一键制作低多边形海报效果教程
- Profile多环境支持
- 会说话的代码 Python pyttsx3,及AttributeError:partially initialized module......(......)报错,解决方法
- idea中TKK: 更新 TKK 失败,请检查网络连接
- 鸿蒙智慧电视,鸿蒙带来的超强多屏互动 荣耀智慧屏与普通电视的不同
- 唐巧总结的40个国人iOS技术博客
- Dva 的connect使用
- wps一直显示正在备份怎么办_wps一直显示正在保存
- java-php-python-ssm网上购物超市系统计算机毕业设计