CF154D. Flatland Fencing [博弈论 对称 平局]

传送门

题意:



背景是$knights‘ tournament$,好棒的样子!

这道题不一样很恶心的地方就是有平局的存在

首先判断能不能一步杀

不能的话,如果可以走$0$步或者$a,b$一负一正那么一定会平局,因为这时候两人移动范围相同肯定不会去送死啊

剩下的,可以简化成,有$d=|x_1-x_2|$个石子,每人每次可以取$[a,b]$个,谁取完最后一颗就胜利

这时候$SG$定理显然没什么用,应该往“对称”方向考虑

发现一个$a+b$一定可以两人走完

然后按照$d%(a+b)$的结果分类

注意如果处在$[1,a-1] \bigcup [b+1,a+b-1]$也是平局!

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=1005;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1; c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘; c=getchar();}
    return x*f;
}
int x1,x2,a,b,f=1;
void solve(){
    if(x1+a<=x2 && x2<=x1+b) {puts("FIRST"),printf("%d\n",x2);return;}

    if(a==0 || b==0) {puts("DRAW");return;}
    if(a<0 && b>0) {puts("DRAW");return;}
    if(a>0){
        if(x1>x2) {puts("DRAW");return;}
    }else{
        if(x1<x2) {puts("DRAW");return;}
        a=-a;b=-b;swap(a,b);f=-1;
    }
    int d=abs(x1-x2),t=d%(a+b);//printf("d %d %d\n",d,t);

    if(t==0) puts("SECOND");
    else if(a<=t&&t<=b) puts("FIRST"),printf("%d\n",x1+t*f);
    else puts("DRAW");
}
int main(){
    //freopen("in","r",stdin);
    x1=read();x2=read();a=read();b=read();
    solve();
}
时间: 2024-11-03 21:49:16

CF154D. Flatland Fencing [博弈论 对称 平局]的相关文章

BZOJ 1982: [Spoj 2021]Moving Pebbles [博弈论 对称]

给你N堆Stone,两个人玩游戏. 每次任选一堆,首先拿掉至少一个石头,然后移动任意个石子到任意堆中. 谁不能移动了,谁就输了... 以前在poj做过已经忘记了... 构造对称,选最多的一堆往其他堆分构造对称局面,先手必胜 一开始就对称,先手必败 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using

POJ 2484 A Funny Game 博弈论 对称博弈

http://poj.org/problem?id=2484 1和2时Alice必胜,3时Bob必胜,其他情况下Bob只需要在Alice取过之后取一次将剩下的硬币链平均分为两份,然后Alice怎么取Bob对称着取就可以了. 真是巧妙. 代码 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #i

Part.4【博弈论】

---恢复内容开始--- 不要问我为什么突然跳到Part.4,我懒得解释. 在蔡大神的论文+讲解和HZW的题库下,自己大概是明白什么是博弈论的皮毛了吧. 先说SG定理吧. 对于游戏中的状态,我们给每个状态定义一个必胜态和必败态.区别在于前者可以通过一次操作到达必败态,但后者无法做到(后者在一次操作后所能到达的状态全部都为必胜态) 接着引进SG函数,每个状态都有一个SG值,这个值由它所能到达的状态的SG值决定.(这里的所能到达的状态指的是经过一次操作能到达的状态,下同) SG值有以下性质: SG值

【博弈论】HDU 5754 Life Winner Bo

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5754 题目大意: 4种棋子,象棋中的 1王,2车,3马,4后,选其一,B和G轮流走,不能往左上走,一开始棋子在(1,1),谁先走到(n,m)谁赢,无法走动算平局D. (n,m<=1000,case<=1000) 题目思路: [博弈论] 这题博弈论.怎样都输为必败,只能走到必败的为必胜. 王:(王可以横竖斜走一格)如果n个m均为奇数先手必败,否则必胜. 从3x3格子看,当n和m均为奇数时先手必败,

博弈论入门小结

感受到了被博弈论支配的恐惧-- 入门的话个人按顺序推荐几篇论文: <由感性认识到理性认识--透析一类搏弈游戏的解答过程>张一飞 <解析一类组合游戏>  王晓珂 <组合游戏概述-浅谈SG游戏的若干拓展及变形> 贾志豪 看完这三篇还是要有点时间的,然而博主很傻的倒着看完了,然后就成功地完成了入门到放弃,事倍功半-- 到现在为止博弈论做了7道题,感觉只是大致学了一点皮毛,以后肯定回去再做一些题目,然而Hz书店没有和博弈论有关的书,差评. 只能说博弈论是一个很奇妙的东西,并没有

Multiplication Game(博弈论)

Description Alice and Bob are in their class doing drills on multiplication and division. They quickly get bored and instead decide to play a game they invented. The game starts with a target integer N≥2N≥2 , and an integer M=1M=1. Alice and Bob take

博弈论中的Nim博弈

\(Updating ...\) 瞎扯 \(orzorz\) \(cdx\) 聚聚给我们讲了博弈论.我要没学上了,祝各位新年快乐.现在让我讲课我都不知道讲什么,我会的东西大家都会,太菜了太菜了. 马上就要回去上文化课了,今明还是收下尾再稍微开一波多项式吧,不然万一文化课上自闭了被锤自闭了站教室外面没课听了还能有事情做--所以把这两天学到的东西稍微整理一下,以后再慢慢完善好了. 发现博弈论的题目还是 \(Nim\) 博弈和其他的比较多.这次就先简单整理一些 \(Nim\) 博弈的类型和东西吧,主要

博弈论 (学习中……持续更新)

博弈论 以下主要内容来自于对集训队论文<组合游戏略述--浅谈SG游戏的若干拓展及变形>的整理与从其他地方收集补充的一些经典模型 博弈论还在学习过程中,可能还会补充一些东西 组合游戏基础定义 游戏的定义: 游戏有2名参与者,两人轮流操作 游戏过程中的任意时刻有确定的状态 参与者操作时将游戏从当前状态转移到另一状态,且规则规定了在任意状态时,可以到达的状态集合 在有限步数之内结束(没有平局) 参与者拥有完全的信息 游戏的表示: 定义:对于一个游戏,如果当前状态\(P\),玩家\(L\)可以转移到的

[CodePlus 2018 3 月赛] 博弈论与概率统计

link 题意简述 小 $A$ 与小 $B$ 在玩游戏,已知小 $A$ 赢 $n$ 局,小 $B$ 赢 $m$ 局,没有平局情况,且赢加一分,输减一分,而若只有 $0$ 分仍输不扣分. 已知小 $A$ 每次赢得概率为 $p$ ,问小 $A$ 得分期望. $T$ 组数据. $T,n,m\leq 2.5\times 10^5$ $solution:$ 因为赢场输场已经固定,所以 $p$ 其实是没有用,则现在考虑计算小 $A$ 得分总和. 将赢输场前缀和,记为 $\{s\}$,则得分为 $n-m-mi