EOJ Monthly 2019.9 (based on September Selection) A.才艺展示(博弈sg找规律)、D.站军姿(概率)

本文主要是介绍EOJ Monthly 2019.9 (based on September Selection) A.才艺展示(博弈sg找规律)、D.站军姿(概率),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A. 才艺展示(sg找规律)

题目

Cuber QQ 和 Little Fang 两人会按照游戏规则轮流写 { 1,2,⋯,N } ( N 是一个正整数)中的一个数。

游戏的规则是这样的,若一个人写下数 i , 则另一个人只能写 i+1 或 2i ( i,i+1,2i 均不超过 N )。两个人中,谁先写到 N 这个数字,谁就能获胜。

当然 Cuber QQ 为了表现自己的绅士,他让 Little Fang 先写, Little Fang 的开场是单调而固定的,他一定会写数字 1 。

由于表演需要,两个人一共要玩 T 局游戏。每局游戏都会给定提前正整数 N ,当然 Cuber QQ 和 Little Fang 的聪明程度是毋庸置疑的,所以他们都会按照最优的策略进行游戏。

1<=T<=1e5,1<=N<=1e18

思路来源

涛神

题解

先sg打个表

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1005;
int n;
int ok[N];
int dfs(int i)
{if(~ok[i])return ok[i]; if(i==n)return ok[i]=0;//是否必败 bool f=1;//是否必败 if(i+1<=n)f&=dfs(i+1);if(2*i<=n)f&=dfs(2*i);ok[i]=f^1;return ok[i];
}
void out(int x)
{int s[10],cnt;for(;x;x/=2)s[++cnt]=x%2;reverse(s+1,s+cnt+1);for(int i=1;i<=10-cnt;++i)printf("%d",0);for(int i=1;i<=cnt;++i)printf("%d",s[i]);puts(""); 
}
int main()
{for(int i=1;i<=1000;++i){n=i;memset(ok,-1,sizeof ok);if(dfs(1)){printf("%-10d:",n);out(i);}}return 0;
}

看前面看不出来,转化成二进制(i->2*i)发现,

后手必胜当且仅当二进制位只有偶数位能为1

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
int T;
ll n,lose;
int main()
{for(int i=0;i<64;i+=2)lose|=(1ll<<i);scanf("%d",&T);while(T--){scanf("%lld",&n);if(n&lose)puts("Little Fang Win");else puts("Cuber QQ Win");}return 0;
}

和涛神讨论了一下证明:

①n%2==1 先手必胜 n=2*i+1 先手可以控制不去2*i这个状态从而获胜 

由于2*i这个状态是偶数 先手位于1 不管后手怎么取 后手选完之后的数都是偶数 

先手每次都+1就保持奇数状态 从而让对手去2*i 从而先手必胜 

②n与4*n走到的人相同,故二者胜负情况相同,若A走到n,分两种情况,

(1)B走到2*n,此时A可走到4*n

(2)B走到n+1,此时A可走到2*n+2,由于剩下无法*2,+1交替知A走到4*n

③4*n与4*n+2胜负情况相同,只需证4n+2只能由4n通过+1+1得,不能通过(2*n+1) *2得即可

显然2*n+1只能通过2*n转移得来,若A走到2*n,B走到2n+1,则A走到4*n+2,A获胜

同理,所以在A走到2*n时,B不会走+1,只会*2到4*n,所以4*n+2与4*n同胜负

④n==2时,后手获胜

①到④可证明,后手获胜的情况,

只能是2,或2乘4若干次,或2乘4若干次再+2

这与前面sg打表的情况一致

 

D. 站军姿

题意

样例数T<=1e5

把n(n<=1e18)个点放在一个圆周上,问他们在同一个半圆周上的概率p/q(mod 1e9+7)

题解

圆中四鸭扩展版,结论题,答案为\frac{2n}{2^n}

考虑一只鸭子的选点,其覆盖域是一个半圆,那么把它覆盖的和没覆盖的两个半圆中间画一条线,

用这一条线代表这一只鸭子,鸭子可以选在这一条线的任意一侧,

n只鸭子2选1,共2^{n}种选法,而每一只鸭子都可以选择两点中的一点覆盖半圆,

n个半圆的交集的所有可能,构成了分子的解答,而n条不重合的线将圆分成2n条弧

每一条弧都对应了一种不同情况的交集,故为上述结论

 

后续:感觉官方题解更好理解

这篇关于EOJ Monthly 2019.9 (based on September Selection) A.才艺展示(博弈sg找规律)、D.站军姿(概率)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228912

相关文章

poj2505(典型博弈)

题意:n = 1,输入一个k,每一次n可以乘以[2,9]中的任何一个数字,两个玩家轮流操作,谁先使得n >= k就胜出 这道题目感觉还不错,自己做了好久都没做出来,然后看了解题才理解的。 解题思路:能进入必败态的状态时必胜态,只能到达胜态的状态为必败态,当n >= K是必败态,[ceil(k/9.0),k-1]是必胜态, [ceil(ceil(k/9.0)/2.0),ceil(k/9.

hdu3389(阶梯博弈变形)

题意:有n个盒子,编号1----n,每个盒子内有一些小球(可以为空),选择一个盒子A,将A中的若干个球移到B中,满足条件B  < A;(A+B)%2=1;(A+B)%3=0 这是阶梯博弈的变形。 先介绍下阶梯博弈: 在一个阶梯有若干层,每层上放着一些小球,两名选手轮流选择一层上的若干(不能为0)小球从上往下移动,最后一次移动的胜出(最终状态小球都在地面上) 如上图所示,小球数目依次为

hdu4865(概率DP)

题意:已知前一天和今天的天气概率,某天的天气概率和叶子的潮湿程度的概率,n天叶子的湿度,求n天最有可能的天气情况。 思路:概率DP,dp[i][j]表示第i天天气为j的概率,状态转移如下:dp[i][j] = max(dp[i][j, dp[i-1][k]*table2[k][j]*table1[j][col] )  代码如下: #include <stdio.h>#include

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

AI模型的未来之路:全能与专精的博弈与共生

人工智能(AI)领域正迅速发展,伴随着技术的不断进步,AI模型的应用范围也在不断扩展。当前,AI模型的设计和使用面临两个主要趋势:全能型模型和专精型模型。这两者之间的博弈与共生将塑造未来的AI技术格局。本文将从以下七个方面探讨AI模型的未来之路,并提供实用的代码示例,以助于研究人员和从业者更好地理解和应用这些技术。 一、AI模型的全面评估与比较 1.1 全能型模型 全能型AI模型旨在在多

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc