首页 > 其他分享 >HDU 1729 Stone Game

HDU 1729 Stone Game

时间:2024-09-05 22:04:14浏览次数:4  
标签:Stone return int vi 石子 HDU Game res using

https://ac.nowcoder.com/acm/contest/34655/C

有 \(n\) 个箱子,第\(i\)个箱子最多放 \(s_i\)个石子,当前箱子里的石子数为 \(c_i\)。两个人轮流往箱子里放石子,而且每一次放的数量都有限制:不能超过当前箱子内石子数的平方。例如箱子里有 \(3\) 颗石子,那么下一个人就可以放\(1-9\) 颗石子,直到箱子被装满。当有一方放不下石子时游戏结束,最后放不下石子的人输。问先手是否能获胜。

常规思路肯定是枚举,然后求出SG函数在异或。

#include<bits/stdc++.h>

using namespace std;


using i32 = int32_t;
using i64 = long long;

using vi = vector<int>;

int mex(vi a) {
    ranges::sort(a);
    auto [ret, lst] = ranges::unique(a);
    a.erase(ret, lst);
    for (int i = 0; i < a.size(); i++)
        if (a[i] != i) return i;
    return a.size();
}

vi g;
int s;

int sg(int x) {
    if (g[x] != -1) return g[x];
    vi a;
    for (int i = 1, X; i <= x * x and i + x <= s; i++)
        a.push_back(sg(x + i));
    return g[x] = mex(a);
}

i32 main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);

    int n, res = 0;
    cin >> n;
    for (int i = 1, c; i <= n; i++) {
        cin >> s >> c;
        g = vi(s + 1, -1);
        res ^= sg(c);
    }
    if (res != 0) cout << "Yes\n";
    else cout << "No\n";
    return 0;
}

但是这个思路会T,我们考虑些优化。

首先对于当前状态\((s,c)\)。我们求出最大的\(p\)满足\(p + p ^ 2 < s\),这样的话\((p + 1) + (p + 1) ^ 2 \ge s\)。然后我们考虑\(p\)和\(c\)的关系。

如果\(c > p\),此时先手可以一步放满,因此必胜。

如果\(c = p\),此时先手无法一步放满,后手则可以一步放满,因为先手至少放\(1\),则后手至少可以到达。

如果\(c < p\),状态未知,但是当前状态已知的是谁到\(p\)谁就会输,所以可以递归的查找\((p,c)\)的 SG 函数

而对于\(c>p\)的情况,我们就要打表找规律,找到\((s,c)\)的 SG 函数,这里的结论是\(s - c\)

#include<bits/stdc++.h>

using namespace std;


using i32 = int32_t;
using i64 = long long;

using vi = vector<int>;

int sg(int s, int c) {
    assert(s >= c);
    int p = sqrt(s);
    while(p + p * p >= s) p --;
    if (c > p) return s - c;
    if (c == p) return 0;
    return sg(p, c);
}

i32 main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int n, res = 0;
    cin >> n;
    for (int i = 1, s, c; i <= n; i++) {
        cin >> s >> c;
        res ^= sg(s, c);
    }
    if (res != 0) cout << "Yes\n";
    else cout << "No\n";
    return 0;
}

标签:Stone,return,int,vi,石子,HDU,Game,res,using
From: https://www.cnblogs.com/PHarr/p/18399291

相关文章

  • 关于ybc_game库的用法(第一期)
    大家好,我是于翱睿,今天我给大家更新一期如何正确的使用ybc_game库,避免踩坑。首先,需要说的是:所有的图片必须放在images文件夹里,在代码中不用写“images/”同样,要想保存音频,所有的音频必须放在sounds文件夹中,在代码中不用写“sounds/”所有说明我都放到注释里了,注意仔细观察那......
  • 【转载】《扩散模型是实时游戏引擎(Diffusion Models Are Real-Time Game Engines)》的
    地址:https://www.youtube.com/watch?v=VniPJII6ak08月29号,谷歌DeepMind发布了一篇名为《扩散模型是实时游戏引擎(DiffusionModelsAreReal-TimeGameEngines)》的论文,向我们展示了世界上第一个完全由神经模型驱动的游戏引擎,GameNGen。这也是历史上首次,AI能在不借助其他......
  • WeGame平台启动时闪退提示“未找到d3dcompiler.dll”该怎么修复?WeGame平台崩溃弹窗“
    当WeGame平台启动时闪退并提示“未找到d3dcompiler.dll”,您无需太过焦虑。您可以尝试重新安装DirectX组件,或者从可靠渠道获取该文件并正确放置。还可以检查系统和平台的更新,以修复此问题。本篇将为大家带来WeGame平台启动时闪退提示“未找到d3dcompiler.dll”该怎么修复的内容,......
  • ngui物件在Scenes中有显示,在game视图中没有显示的原因
    我们在创建物件的时候,在scenes视图中用到的是全局的camera,所以不管是3d物件还是ugui物件,ngui物件都是有显示的。但是在game视图中,3d物件和ugui物件都是用到的是全局的camera。ngui用到的是它本身自带的camera。所以我们只要在ngui中的camera能显示出来,那么我们就能在game视图中显示......
  • GAMES202——作业4 Kulla-Conty BRDF(BRDF的预计算、重要性采样)
    目录任务实现    预计算E(µ)    预计算Eavg    Bonus1:重要性采样    在实时渲染中使用预计算数据结果任务        完成Kulla-ContyBRDF模型,关键在于计算BRDF的补偿项fms,而fms的计算需要E(µ)和......
  • CF 1994 C. Hungry Games (*1600) 思维+二分
    CF1994C.HungryGames(*1600)思维+二分题目链接题意:给你一个长度为\(n\)的关卡,和一个正整数\(x\),初始分数为\(0\),通过每个关卡就会获得对应的分数。但是分数如果超过\(x\),就会清零。现在让你求出满足最终得分不为零的所有子区间数量。思路:正难则反,改求最终得分为......
  • 31263 / 32004 Game Development
    31263/32004GameDevelopmentLabWeek4GettingStarted1.Downloadthecorrespondingweek’szipfilefromthisweek’smoduleonCanvas.2.UnziptheprojectfolderandopenitinUnity.Ifthereareanywarningsaboutdifferenceinversions,justconti......
  • GAMES102 Lecture 01
    Lecture01图像是离散的像素图形是具有数学意义的点、线、面,是连续的,有数学表达的渲染是在解积分方程仿真是在解偏微分方程函数拟合线性空间元素之间有运算:加法、数乘线性结构:对加分和数乘封闭加法交换律、结合了、数乘分配律基/维数:\(L=span\{V_1,V_2,........
  • GAMES102 Lecture 02 数据拟合
    Lecture02数据拟合假定:仅函数形式,一般曲线(非函数形式)后续再讲\(f:R^1\rightarrowR^1\\y=f(x)\)函数拟合问题输入:一些观察(采样)的数据点的数据点\(\{x_i,y_i\}_{i=0}^n\)输出:拟合数据点的函数\(y=f(x)\),并用于观测拟合函数的“好坏”分段线性插值函数\(y=f_1(x)\)......
  • Lecture 04 Rendering on Game Engine
    Lecture04RenderingonGameEngineChallengesonGameRendering成千上万不同类型的物体在现代计算机上跑(CPU、GPU的复杂结合)稳定帧率帧率分辨率限制CPU带宽和内存渲染只占20%左右,剩下留给Gamelogic、网络、动画、物理和AI系统等等OutlineofRenderingBas......