I - Bob vs ATM(博弈论)

这篇具有很好参考价值的文章主要介绍了I - Bob vs ATM(博弈论)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

传送门:nefu_10-18 - Virtual Judge (vjudge.net)

思路:

nim游戏的变形。

(())相当于在一堆n个石子中取任意个,sg(n)=n;

((()))(())(),相当于可以在3堆石子分别为3,2,1个石子中取任意个sg函数值为:

sg(3)^sg(2)^sg(1);

对于(()()(())),这样的,刨除外面一层,sg函数为sg(1)^sg(1)sg(2)=2;

我们可以把他等效成(())【sg值一致】,整个就可以等效成((()));

将整个序列等效成由(())这样的括号组成,异或sg函数值即可。

具体操作时:

记录“(”的位置和对应“)”位置,然后solve(1,n)递归处理。

当l==r-1,说明是()这种情况,返回1;

当p[l]==r,说明最外层是(),返回1+solve(l+1,r-1);

除上述情况 返回solve(l, p[l]) ^ solve(p[l] + 1, r);

代码:

#define _CRT_SECURE_NO_WARNINGS 
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<unordered_map>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int N = 1e5 + 1000;
char s[N];
unordered_map<int, int> p;
stack<int>q;
int solve(int l,int r)
{
    /*cout << l <<" " << r << endl;*/
    if (r <= l) return 0;
    if (l == r - 1 && s[l] == '(' && s[r] == ')') return 1;
    if (p[l] == r) return 1 + solve(l + 1, r - 1);
    return  solve(l, p[l]) ^ solve(p[l] + 1, r);
}
int main() {
    int T;
    cin >> T;
    while (T--)
    {
        cin >> s + 1;
        int len = strlen(s + 1);
        for (int i = 1; i <= len; i++)
        {
            if (s[i] == '(')
                q.push(i);
            else
            {
                p[q.top()] = i;
                q.pop();
            }
        }
        int ans = solve(1,len);
        /*cout << ans << endl;*/
        if (ans)
            printf("ATM\n");
        else
            printf("Bob\n");
        p.clear();
    }
    return 0;
}文章来源地址https://www.toymoban.com/news/detail-722484.html

到了这里,关于I - Bob vs ATM(博弈论)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【学习笔记】博弈论 ---- 非偏博弈

    本篇按照 Qingyu 在省集讲的加入我这个萌新的萌新理解而成。 听了 Qingyu 的博弈论讲解,感觉我之前学过的博弈就是冰山一角。 由于有一些东西没听懂,就主要写写我听懂的部分,没懂得以后再说吧。 所以这篇只是一个入门,关于博弈的一些习题可能会咕咕咕。 几个基本定

    2024年02月07日
    浏览(56)
  • 博弈论 | 斐波那契博弈

    博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论。博弈论是研究互动决策的理论。博弈可以分析自己与对手的利弊关系,从而确立自己在博弈中的优势,因此有不少博弈理论,可以帮助对弈者分析局势,从而采取相应策略,最终达到

    2024年02月12日
    浏览(43)
  • 汤姆·齐格弗里德《纳什均衡与博弈论》笔记(7)博弈论与概率论

    第十一章 帕斯卡的赌注——博弈、概率、信息与无知 在与费马就这个问题的通信过程中,帕斯卡创造出了概率论。另外,帕斯卡在进行严谨的宗教反思中,得出了 概率 这个概念,它在此几百年后,成为一个关键的、对博弈论的提出有重要意义的数学概念。 帕斯卡观察到,

    2024年01月25日
    浏览(52)
  • 博弈论-策略式博弈矩阵、扩展式博弈树 习题 [HBU]

    目录 前言: 题目与求解 11.请将“田忌赛马”的博弈过程用策略式(博弈矩阵)和扩展式(博弈树)分别进行表示,并用文字分别详细表述。 34.两个朋友在一起划拳喝酒,每个人有4个纯策略:杠子、老虎、鸡和虫子。 输赢规则是:杠子降老虎,老虎降鸡,鸡降虫子,虫子降

    2024年02月03日
    浏览(49)
  • 【博弈论笔记】第二章 完全信息静态博弈

    此部分博弈论笔记参考自经济博弈论(第四版)/谢识予和老师的PPT,是在平时学习中以及期末备考中整理的,主要注重对本章节知识点的梳理以及重点知识的理解,细节和逻辑部分还不是很完善,可能不太适合初学者阅读(看书应该会理解的更明白O(∩_∩)O哈哈~)。现更新到

    2024年02月10日
    浏览(51)
  • Nim游戏博弈论

    https://www.luogu.com.cn/problem/P2197 甲,乙两个人玩 nim 取石子游戏。 nim 游戏的规则是这样的:地上有 n n n 堆石子(每堆石子数量小于 1 0 4 10^4 1 0 4 ),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了

    2024年02月15日
    浏览(47)
  • 博弈论入门

    古诺双寡头模型的条件 市场中有且仅有两家公司 策略为同质商品的量, q i q_i q i ​ 边际成本为c,生产成本就为c*q,在这里我们的边际成本是常数。 需求曲线: P = a − b ∗ ( q 1 + q 2 ) P=a-b*(q_1+q_2) P = a − b ∗ ( q 1 ​ + q 2 ​ ) 利润: U 1 ( q 1 , q 2 ) = P ∗ q 1 − c ∗ q 1 , U 2 (

    2024年02月02日
    浏览(45)
  • 博弈论小课堂:零和博弈(找到双方的平衡点)

    从概率论延伸出来的课题——博弈论,博弈论中最典型的两大类博弈,是“零和博弈”与“非零和博弈”。博弈论所研究的最优化问题有多方参与,因此最优化的策略要考虑对方的行为。 博弈论通常被认为是冯·诺依曼发明的,博弈论从本质上讲,是一套解决最优化问题的方

    2024年02月09日
    浏览(45)
  • 台阶型Nim游戏博弈论

    https://www.acwing.com/problem/content/894/ 现在,有一个 n n n 级台阶的楼梯,每级台阶上都有若干个石子,其中第 i i i 级台阶上有 a i a_i a i ​ 个石子( i ≥ 1 i ge 1 i ≥ 1 )。 两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。 已经拿到

    2024年02月14日
    浏览(43)
  • 基于博弈论的频谱分配(MATLAB实现)

    代码: 结果:

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包