洛谷 P4706 取石子 解题报告
P4706 取石子
题目描述
现在 Yopilla 和 yww 要开始玩游戏!
他们在一条直线上标记了 \(n\) 个点,从左往右依次标号为 \(1, 2, ..., n\) 。然后在每个点上放置一些棋子,其中第 \(i\) 个点放置了 \(a_i\) 个棋子。接下来,从 Yopilla 开始操作,双方轮流操作,谁不能操作谁输。每次的操作是:当前操作方选定一个有棋子的点 \(x\) ,然后选择至少一个点 \(x\) 上的棋子,然后把这些棋子全都移动到点 \(x / prime\)上,其中 \(prime\) 是一个质数,且 \(prime \mid x\) 。
Yopilla 最初一次操作的策略是随机的:随机找到一个有棋子的点 \(x\) ,随机选择正整数个棋子 \(y\) ,随机转移到一个能转移到的点 \(z\)。所有棋子可以看作是一样的,换句话说:两种操作不同,当且仅当三元组 \((x, y, z)\) 不同。之后双方都按照最优策略来操作。
Yopilla 想要预测,他能够获胜的概率是多少,答案对 $998244353$3 取模。
输入输出格式
输入格式:
第一行一个数 \(n\) 。
第二行 \(n\) 个数 \(a_1, a_2, ..., a_n\) 。
输出格式:
输出 \(m\) 行,表示 Yopilla 能够获胜的概率对 \(998244353\) 取模。
说明
对于 \(20 \%\) 的数据,只有一个石子。
对于 \(100 \%\) 的数据,\(1 \le n \le {10} ^ 6, 0 \le a_i \le {10} ^ 9\),保证至少有一个不在一号点的石子。
太神仙了...
如果把图建出来,我们可以按照每个数的幂的和的奇偶性构造二分图(1为偶),然后就是一个阶梯\(Nim\)问题
然后我们筛一下每个数的质因子个数顺便分层,然后统计一下奇层的\(SG\)
总情况很好算
然后枚举一下随机操作对\(SG\)函数的影响
具体的,枚举每一个奇层的点,然后发现这个点要变成\(SG \ xor \ a_i\)才能使对面必败,然后讨论一下这个值是给出去还是由别人给的情况。
最后算一下概率就可以了。
Code:
#include <cstdio>
const int N=1e6+1;
int pri[N],ispri[N],is[N],num[N],cnt;
int n,a[N],SG;
#define ll long long
const ll mod=998244353;
ll win,sum;
ll qp(ll d,ll k){ll f=1;while(k){if(k&1)f=f*d%mod;d=d*d%mod,k>>=1;}return f;}
void init()
{
for(int i=2;i<=n;i++)
{
if(!ispri[i])
{
pri[++cnt]=i;
num[i]=is[i]=1;
}
for(int j=1;j<=cnt&&i*pri[j]<=n;j++)
{
int x=i*pri[j];
ispri[x]=1;
is[x]=is[i]^1;
if(i%pri[j]) num[x]=num[i]+1;
else {num[x]=num[i];break;}
}
}
}
int main()
{
scanf("%d",&n);
init();
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
if(is[i]) SG^=a[i];
(sum+=1ll*a[i]*num[i])%=mod;
}
for(int i=1;i<=n;i++)
if(is[i])
{
int to=SG^a[i];
if(a[i]>to)
(win+=num[i])%=mod;
else if(a[i]<to)
for(int j=1;j<=cnt&&pri[j]*i<=n;j++)
win+=a[i*pri[j]]>=to-a[i];
}
printf("%lld\n",win*qp(sum,mod-2)%mod);
return 0;
}
2018.12.18
洛谷 P4706 取石子 解题报告的更多相关文章
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷P2252 取石子游戏(威佐夫博弈)
题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷——P2252 取石子游戏
P2252 取石子游戏 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- 洛谷 P4705 玩游戏 解题报告
P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...
- 洛谷 P1272 重建道路 解题报告
P1272 重建道路 题目描述 一场可怕的地震后,人们用\(N\)个牲口棚\((1≤N≤150\),编号\(1..N\))重建了农夫\(John\)的牧场.由于人们没有时间建设多余的道路,所以现在从一 ...
- 洛谷 P4097 [HEOI2013]Segment 解题报告
P4097 [HEOI2013]Segment 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 给定一个数 \(k\),询问 ...
- 洛谷 CF55D Beautiful numbers 解题报告
CF55D Beautiful numbers 题意 \(t(\le 10)\)次询问区间\([l,r](1\le l\le r\le 9\times 10^{18})\)中能被每一位上数整除的数的个 ...
随机推荐
- Python创建虚拟环境
用于创建和管理虚拟环境的模块称为 venv.venv 通常会安装你可用的最新版本的 Python.如果您的系统上有多个版本的 Python,您可以通过运行 python3 或您想要的任何版本来选择特定 ...
- docker 部署 zookeeper+kafka 集群
主机三台172.16.100.61172.16.100.62172.16.100.63Docker 版本 当前最新版 # 部署zk有2种方法 ## 注意 \后不要跟空格 一 . 端口映射 172.16 ...
- 高可用OpenStack(Queen版)集群-3.高可用配置(pacemaker&haproxy)
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- CS224n-作业1
0 前言 作业1对应的试题 作业1对应的启动代码 作业1主页 1 Softmax(10分) (a)(5分) 对于向量$x+c$的任一维度$i$,有: \begin{align*}\mbox{softm ...
- centos7安装oracle的一些问题
在配置监听的时候尝试了很多次都是不能创建,最后将 /data/oracle/product/11.2.0/db_1/network/admin目录下的listener.ora和tnsname.ora两 ...
- Scrum立会报告+燃尽图(Final阶段第四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2481 项目地址:https://coding.net/u/wuyy694 ...
- 第一次作业——MathExam285
MathExam285 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 • Estimate ...
- Structs2笔记①--structs的背景、structs2框架的意义、第一个helloworld
Struts2的背景 由出色稳定的框架struts1和webwork框架整合而来的 吸取了两大框架的优点 提高了开发的效率和规范性 更好的实现了MVC架构 解除了与servlet的强耦合性 使用str ...
- 【Coursera】线性回归和逻辑回归
一.线性回归 1.批量梯度下降法 每次对参数进行一次迭代时,都要扫描一遍输入全集 算法可以收敛到局部最优值 当迭代多次之后,每次迭代参数的改变越小 2.随机梯度下降法 对于一个输入样本,对参数进行一次 ...
- 24_IO_第24天(转换流、缓冲流)_讲义
今日内容介绍 1.转换流 2.缓冲流 01转换流概述 * A: 转换流概述 * a: 转换流概述 * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...