欢迎使用CSDN-markdown编辑器

来源:互联网 发布:西科软件培训中心 编辑:程序博客网 时间:2024/05/21 22:31

【问题描述】
n=3m 个人在玩石头剪刀布,
一共有 t 轮游戏,每轮有 m 次石头剪刀布。

在同一轮的 m 次游戏中,每个人的决策必须是提前确定的,也就是说不能采用随机策略,也不能根据前若干局的结果决定下一局的决策;
这样,显然一共有 n=3m 种决策。

n=3m 个人会采取两两不同的决策。
为了方便表达,对于第 x0x<n)个人,将 x 转换成三进制得到一个m位的数。
其中 0 表示剪刀,1 表示石头,2 表示布。就得到了第 x 个人采取的策略。

由于编号是固定的,因此每个人在不同轮的 m 次游戏中都会采取同一套决策。

x 个人在最初时有一个分数 f0,x

在第 i 轮中,他将和另一个人 y 进行 m 次的石头剪刀布的比赛。

我们用 W(x,y) 表示 x 在和 ym 次比赛中赢的次数;
L(x,y) 表示 x 在和 ym 次比赛中输的次数。

在第 i 轮结束之后,第 x 个人分数是:

fi,x=0y<nfi1,ybu,v

其中 u=W(x,y)=L(y,x),v=L(x,y)=W(y,x),平局不计入次数;
bu,v 则是一个给定的评分数组。

注意即使 yx 一样(自己转移到自己)也会乘上一个系数 b0,0(即自己跟自己打全为平局)。

显然随着轮数越来越多,分数也会越来越大,
这个计分系统和我们平时用的计算机一样,也会溢出。
当要储存的分数 f 大于等于 p 的时候,就会变成 fmodp

B君想知道 t 轮之后所有人的分数,也就是 ft,0,ft,1,,ft,n1

G君:「诶,我发现这个数 p 有特殊的性质诶!不存在两个正整数,使得他们倒数的和等于 3/p!」

B君:「G君好棒!不过这个题怎么做呢?」

【输入格式】
{{ self.input_file() }}

第一行三个整数,表示 m,t,p。保证 0mtools.hn(prob.args.m)0ttools.hn(prob.args.t)1ptools.hn(prob.args.p)

第二行有 n=3m 个整数,表示 f0,0,f0,1,,f0,n1。保证 0f0,i<p

接下来的部分是一个数组 b,第 1m+1 个数,第 2m 个数……第 m+11 个数。

其中第 i 行的第 j 个数为 bi1,j1i,j1,i+j2m),保证 0bi,j<p

不存在两个正整数,使得他们倒数的和等于 3/p
即不存在正整数 x,y>0,使得 1/x+1/y=3/p

【输出格式】
{{ self.output_file() }}

输出 n=3m 行,每行一个整数,表示每个人最终的得分。

其中第 i 行表示第 i 个人的得分 ft,i

{% set vars = {} -%}
{%- do vars.setitem(‘sample_id’, 1) -%}
{{ self.sample_text() }}

{% set vars = {} -%}
{%- do vars.setitem(‘sample_id’, 2) -%}
{{ self.sample_text() }}

【子任务】

0 0
原创粉丝点击