当前位置: 首页 > news >正文

【博弈】【清华冬令营2018模拟】取石子

写完敢说全网没有这么详细的题解了。
注意:题解长是为了方便理解,所以读起来速度应该很快。


题目描述

nnn 堆石子,第 iii 堆有 xix_ixi 个。 AliceAliceAliceBobBobBob 轮流去石子(先后手未定), AliceAliceAlice 每次从一堆中取走 aaa 个,BobBobBob 每次从一堆中取走 bbb 个,无法操作者输。不难发现只会有四种情况:AliceAliceAlice 必胜,BobBobBob 必胜,先手必胜,后手必胜。你需选定若干堆石子(共有 2n2^n2n 钟方案),AliceAliceAliceBobBobBob 只能在你选出的堆中取,问四种情况对应的方案数。

输入格式

第一行三个整数 n,a,bn,a,bn,a,b
第二行 nnn 个整数 x1,x2,...,xnx_1,x_2,...\ ,x_nx1,x2,... ,xn

输出格式

一行四个整数,分别表示 AliceAliceAlice 必胜,BobBobBob 必胜,先手必胜,后手必胜的方案数,对 109+710^9+7109+7 取模。

样例

输入样例1

2 2 3
2 3

输出样例1

2 0 1 1

样例解释1

数据范围与提示

对于 10%10\%10% 的数据,n,xi≤5n,x_i\le5n,xi5
对于 50%50\%50% 的数据,n≤20n\le20n20
对于另外 10%10\%10% 的数据,a=ba=ba=b
对于又另外 20%20\%20% 的数据,a=1a=1a=1
对于 100%100\%100% 的数据,1≤n≤105,1≤a,b,xi≤1091\le n \le 10^5,1\le a,b,x_i\le 10^91n105,1a,b,xi109


分析

考场没有认真分析,考后知道要分类讨论后就打出来了。
不讲部分分了,因为除了第三条其他的应该也都不会去想。

值得一提的是,当 a=ba=ba=b 时的情况还是有一定启发性的,这告诉我们往奇偶性上面想。

方面处理,我们设 a<ba<ba<b
每堆石子对 a+ba+ba+b 取模,然后可以分四种情况:

1. xi<ax_i<axi<a,没用,但仅存在这种石堆时后手必胜。

2. a≤xi<ba\le x_i<baxi<b,只要存在即 aaa 获胜。

3. b≤xi<2ab\le x_i< 2abxi<2a,只和奇偶性有关。

4. 2a≤xi2a\le x_i2axi

  • 1. 若不存在且 (3) 为奇数个则先手必胜
  • 2. 若不存在且 (3) 为偶数个则后手必胜
  • 3. 若存在两个及以上则 aaa 必胜
  • 4. 若仅存在一个且 (3) 为奇数个则 aaa 必胜
  • 5. 若仅存在一个且 (3) 为偶数个则先手必胜

1~3 都好理解,4 的 1,2 也好理解;
对于4-3,因为无论如何 bbb 均无法阻止 aaa 将局面转化成 (2) 的情况,所以 aaa 必胜;
对于4-4,相当于在 3 为奇数的情况下多了一个 2a≤xi2a\le x_i2axi,注意到此时该堆 aaa 可多次取石,我们对 a,ba,ba,b 两人分别讨论:

  • 对于 aaa 先手,先取 2a≤xi2a\le x_i2axi 的一堆,之后把这一堆搁在一旁,就变成了 4-1 的情况,即 bbb 获胜,但最后 aaa 再取搁在一旁的这堆,此时 bbb 无法再取,aaa 获胜。
  • 而对于 bbb 先手,因为对于 2a≤xi2a\le x_i2axi 的一堆,bbb 仍然最多只能取一次,所以对于 bbb 而言,场上局面依旧是 4-2(奇数堆 + 2a≤xi2a\le x_i2axi 一堆 = 偶数堆),此时后手 aaa 获胜。

再分析 4-5,类似的,我们堆 a,ba,ba,b 两人分别讨论:

  • 对于 aaa 先手,无论怎么选都能使 bbb 进入4-2 的必输状态,aaa 获胜。
  • 对于 bbb 先手,当且仅当其最初选 2a≤xi2a\le x_i2axi 时可使 aaa 进入 4-2 的必输状态,因为默认玩家很聪明,所以 bbb 获胜。

思维量很小,于是就可以打了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long LL;
const int N=1e5+5,M=1e9+7;
int n,a,b,Bz,x[N],fac[N],inv[N];
inline int Rd(){int s=0,w=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}while (ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+ch-'0',ch=getchar();return s*w;}
int qp(int A,int B){int res=1;while (B){if(B&1) res=1ll*res*A%M;A=1ll*A*A%M;B>>=1;}return res;
}
void init(){fac[0]=inv[0]=1;for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%M;inv[n]=qp(fac[n],M-2);for(int i=n-1;i>=1;i--) inv[i]=1ll*inv[i+1]*(i+1)%M;return ;
}
int C(int A,int B){if(A<B) return 0;return 1ll*fac[A]*inv[B]%M*inv[A-B]%M;
}
signed main(){// freopen("stone.in","r",stdin);// freopen("stone.out","w",stdout);n=Rd();a=Rd();b=Rd();init();for(int i=1;i<=n;i++) x[i]=Rd();int c1=0,c2=0,c3=0,c4=0;LL ans1=0,ans2=0,ans3=0,ans4=0;if(a>b) swap(a,b),Bz=1;for(int i=1;i<=n;i++){x[i]%=(a+b);if(x[i]<a) c1++;if(x[i]>=a&&x[i]<b) c2++;else if(x[i]>=b&&x[i]<2*a) c3++;else if(2*a<=x[i]) c4++;}// printf("%d %d %d %d\n",c1 ,c2,c3,c4);int nw=qp(2,n-c2);for(int i=1;i<=c2;i++) (ans1+=1ll*C(c2,i)*nw%M)%=M;  //a<=x[i]<b, A winnw=qp(2,n-c2-c4);for(int i=2;i<=c4;i++) (ans1+=1ll*C(c4,i)*nw%M)%=M;  //2a<=x[i], at least 2, A winans4=qp(2,c1);int C1=qp(2,c1);for(int i=0;i<=(c3-1)/2;i++) (ans3+=1ll*C(c3,2*i+1)*C1%M)%=M;//b<=x[i]<2a, c4=0, First win// printf("%lld\n",ans3);for(int i=1;i<=c3/2;i++) (ans4+=1ll*C(c3,2*i)*C1%M)%=M;      //b<=x[i]<2a, c4=0, Second winfor(int i=0;i<=c3/2;i++) (ans3+=1ll*c4*C(c3,2*i)%M*C1%M)%=M; //c4=1, c3&1=0, First win// printf("%lld\n",ans3);for(int i=0;i<=(c3-1)/2;i++) (ans1+=1ll*c4*C(c3,2*i+1)%M*C1%M)%=M;//c4=1,c3&1=1, A winif(Bz) swap(ans1,ans2);printf("%lld %lld %lld %lld\n",ans1,ans2,ans3,ans4);return 0;
}

相关文章:

【博弈】【清华冬令营2018模拟】取石子

写完敢说全网没有这么详细的题解了。 注意&#xff1a;题解长是为了方便理解&#xff0c;所以读起来速度应该很快。 题目描述 有 nnn 堆石子&#xff0c;第 iii 堆有 xix_ixi​ 个。 AliceAliceAlice 和 BobBobBob 轮流去石子&#xff08;先后手未定&#xff09;&#xff0c; …...

嵌入式:BSP的理解

BSP概念总结BSP定义BSP的特点BSP的主要工作BSP在嵌入式系统和Windowsx系统中的不同BSP和PC机主板上的BIOS区别BSP与 HAL关系嵌入式计算机系统主要由 硬件层&#xff0c;中间层&#xff0c;系统软件层和应用软件层四层组成。硬件层&#xff1a;包含CPU&#xff0c;存储器(SDRAM&…...

Linux主机Tcpdump使用-centos实例

1、安装前系统信息 ifconfig查看系统网络接口情况。这里可以看到3个interface&#xff0c;ens160是正常使用的网口&#xff0c;lo是主机的loopback地址127.0.0.1。另外&#xff0c;由于centos安装在虚拟主机上&#xff0c;virbr0是KVM默认创建的一个Bridge,其作用是为连接其上的…...

线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列

AcWing 898. 数字三角形 1.题目 898. 数字三角形 2.思路 DP问题首先考虑状态转移方程&#xff0c;定义一个集合f ( i , j) &#xff0c;表示从第一个数字&#xff08;1,1&#xff09;走到第 i行&#xff0c;第 j列&#xff08;i , j&#xff09;的所有方案的集合&#xff0c…...

SpringMVC

SpringMVC配置 引入Maven依赖 &#xff08;springmvc&#xff09;web.xml配置DispatcherServlet配置 applicationContext 的 MVC 标记开发Controller控制器 几点注意事项&#xff1a; 在web.xml中 配置<load-on-startup> 0 </load-on-startup> 会自动创建Spring…...

C++模板基础(二)

函数模板&#xff08;二&#xff09; ● 模板实参的类型推导 – 如果函数模板在实例化时没有显式指定模板实参&#xff0c;那么系统会尝试进行推导 template<typename T> void fun(T input, T input2) {std::cout << input << \t << input2 << …...

什么是linux内核态、用户态?

目录标题为什么需要区分内核空间与用户空间内核态与用户态如何从用户空间进入内核空间整体结构为什么需要区分内核空间与用户空间 在 CPU 的所有指令中&#xff0c;有些指令是非常危险的&#xff0c;如果错用&#xff0c;将导致系统崩溃&#xff0c;比如清内存、设置时钟等。如…...

day8—选择题

文章目录1.Test.main() 函数执行后的输出是&#xff08;D&#xff09;2. JUnit主要用来完成什么&#xff08;D&#xff09;3.下列选项中关于Java中super关键字的说法正确的是&#xff08;A&#xff09;1.Test.main() 函数执行后的输出是&#xff08;D&#xff09; public clas…...

ngx错误日志error_log配置

ngx之error_log 日志配置格式&#xff1a; 常见的错误日志级别 错误日志可配置位置 关闭error_log配置 设置debug 日志级别的前提&#xff1a; ngx之error_log 日志配置格式&#xff1a; error_log 存放路径 日志级别 例&#xff1a; error_log /usr/local/log…...

1.11、自动化

自动化 一、java 手机自动化 首先new DesertCapabilities&#xff08;这是一个类&#xff09; setCapability – 设置信息 获取appium的驱动对象 new AppiumDriver – 本机IP地址:端口号/wd/hub,前面的设置值信息 driver.findElementById() – 通过id找位置 click() – 点击 &…...

函数的定义与使用及七段数码管绘制

函数的定义 函数是一段代码的表示 函数是一段具有特定功能的、可重用的语句组 函数是一种功能的抽象&#xff0c;一般函数表达特定功能 两个作用&#xff1a;降低编程难度 和 代码复用 求一个阶乘 fact就是 函数名 n就是参数 return就是输出部分即返回值 而函数的调用就是…...

怎么压缩pdf文件大小?pdf文件太大如何压缩?

喜爱看小说的小伙伴们都会在网上下载很多的pdf格式电子书以方便随时阅览&#xff0c;但是pdf的电子书一般都过于的冗长&#xff0c;下载后的储存也是一个问题&#xff0c;怎么pdf压缩大小呢&#xff1f;可以试试今天介绍的这款pdf在线压缩工具来进行pdf压缩&#xff08;https:/…...

阿里云Linux服务器登录名ecs-user和root选择问题

阿里云服务器Linux系统登录名可以选择root或ecs-user&#xff0c;root具有操作系统的最高权限&#xff0c;但是root会导致的安全风险比较大&#xff0c;ecs-user比较安全&#xff0c;但是如果系统后续依赖root权限就会比较麻烦&#xff0c;从安全的角度&#xff0c;建议选择ecs…...

【云原生】 初体验阿里云Serverless应用引擎SAE(三),挂载配置文件使应用的配置和运行的镜像解耦

目录 一、前言二、SAE配置1、创建配置项2、配置SAE Nginx服务效果1、【云原生】 初体验阿里云Serverless应用引擎SAE(一),部署Nginx服务 2、【云原生】 初体验阿里云Serverless应用引擎SAE(二),前端Nginx静态文件持久化到对象存储OSS 本篇 3、【云原生】 初体验阿里云Se…...

Oracle用户密码过期,修改永不过期

修改密码有效过期时间&#xff0c;可以通过以下四步设置&#xff0c;如果再第一步发现本身的密码过期时间为无限期的&#xff0c;那就请各位小伙伴绕过&#xff0c;如果发现不是无期限的&#xff0c;那么必须设置第四步&#xff0c;才会生效。 目录 第一步&#xff1a;查询密码…...

welearn 视听说1-4

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…...

【git】将本地项目同步到远程

前提&#xff1a;git已经安装&#xff0c;并与账号完成密钥绑定 在github上创建一个新仓库 在项目文件夹下&#xff0c;右击选择git bash here &#xff0c;打开一个终端对话框 git init (在项目目录下出现隐藏的.git文件夹&#xff0c;目的是把该项目文件夹变成git可管理…...

10-链表练习-LeetCode82删除排序链表中的重复元素II

题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 示例 2&#xff1a; 输入&#xff1a;head …...

贯穿设计模式第五话--接口隔离原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…...

C语言计算机二级/C语言期末考试 刷题(四)

在空闲时间整理了一些C语言计算机二级和C语言期末考试题库 整理不易&#xff0c;大家点赞收藏支持一下 祝大家计算机二级和期末考试都高分过 系列文章&#xff1a; C语言计算机二级/C语言期末考试 刷题&#xff08;一&#xff09; C语言计算机二级/C语言期末考试 刷题&#x…...

MCMC可视化指南:用动画理解马尔可夫链的收敛过程

MCMC可视化指南&#xff1a;用动画理解马尔可夫链的收敛过程 在数据科学和统计建模领域&#xff0c;马尔可夫链蒙特卡洛(MCMC)方法已经成为解决复杂概率分布采样问题的利器。但对于初学者而言&#xff0c;理解马尔可夫链如何通过随机游走最终收敛到目标分布&#xff0c;往往是…...

AI上色有多强?cv_unet_image-colorization修复老照片效果对比展示

AI上色有多强&#xff1f;cv_unet_image-colorization修复老照片效果对比展示 1. 引言&#xff1a;老照片焕发新生的魔法 翻开泛黄的相册&#xff0c;那些黑白照片承载着无数珍贵记忆&#xff0c;却因年代久远失去了原本的色彩。传统的手工上色不仅耗时耗力&#xff0c;还需要…...

问题解决:AI股票分析师启动失败?自查脚本与Ollama服务加载

问题解决&#xff1a;AI股票分析师启动失败&#xff1f;自查脚本与Ollama服务加载 1. 引言 你满怀期待地部署了那个“AI股票分析师”镜像&#xff0c;点击启动&#xff0c;然后……页面一片空白&#xff0c;或者提示服务不可用。这种感觉就像准备大展拳脚时&#xff0c;发现工…...

香橙派OrangePi One到手必做:Linux系统首次启动自动扩容rootfs的保姆级验证指南

香橙派OrangePi One开箱指南&#xff1a;首次启动自动扩容rootfs的完整验证流程 第一次拿到香橙派开发板时&#xff0c;最让人困惑的莫过于如何确认系统是否成功利用了TF卡的全部空间。作为嵌入式Linux新手&#xff0c;我清楚地记得自己第一次启动OrangePi One时的忐忑——那些…...

解密革命性构建工具:PoeCharm如何突破传统限制实现高效角色规划

解密革命性构建工具&#xff1a;PoeCharm如何突破传统限制实现高效角色规划 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 在流放之路的复杂游戏生态中&#xff0c;角色构建往往成为玩家面临的最大…...

AOP 代理对象的诞生时刻:Bean 生命周期中的“夺舍”瞬间

各位大佬&#xff0c;欢迎来到 Spring 容器最神秘、最惊心动魄的现场&#xff01;很多人以为 AOP 是“天生”的&#xff0c; Bean 一出生就带着光环。大错特错&#xff01;不过是前人在负重前行&#xff1a;Spring 先造出一个“纯净的肉身”&#xff08;原始对象&#xff09;&a…...

ESFT-gate-summary-lite:AI快速提炼文本关键信息

ESFT-gate-summary-lite&#xff1a;AI快速提炼文本关键信息 【免费下载链接】ESFT-gate-summary-lite ESFT-gate-summary-lite模型&#xff0c;基于DeepSeek-ai的开源项目&#xff0c;专注于提升基础模型摘要能力。源自ESFT-vanilla-lite&#xff0c;强化文本摘要&#xff0c;…...

OpenClaw技能分享:GLM-4.7-Flash驱动的邮件自动处理系统

OpenClaw技能分享&#xff1a;GLM-4.7-Flash驱动的邮件自动处理系统 1. 为什么需要自动化邮件处理 每天早晨打开邮箱&#xff0c;看到堆积如山的未读邮件总让人头皮发麻。作为一个小团队的负责人&#xff0c;我经常需要处理客户咨询、内部沟通、会议邀请等各种类型的邮件。最…...

PHP开发者必看:如何在本地环境快速搭建gRPC和Protobuf开发环境

PHP开发者必看&#xff1a;如何在本地环境快速搭建gRPC和Protobuf开发环境 作为一名长期与PHP打交道的开发者&#xff0c;我深刻理解在微服务架构盛行的当下&#xff0c;掌握gRPC和Protobuf技术栈的重要性。记得第一次尝试在本地搭建环境时&#xff0c;光是版本兼容问题就耗费了…...

Kimi,Minimax教你的客服怎么做客服

Kimi&#xff0c;教你怎么做客服。下面是Kimi根据我提供的图片写的文章。不是说minimax全面领先kimi&#xff0c;至少我在不断的提高自己的kimi会员等级。但是有时候&#xff0c;这是被迫的消耗积分和额度。199的套餐也快消耗完了。消耗积分是应该的&#xff0c;关键是要用在刀…...