POJ 2484 A Funny Game

博弈。

$n>=3$,后手赢,否则先手赢。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-8;
void File()
{
    freopen("D:\\in.txt","r",stdin);
    freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
    char c = getchar(); x = 0;while(!isdigit(c)) c = getchar();
    while(isdigit(c)) { x = x * 10 + c - ‘0‘; c = getchar();  }
}

int n;

int main()
{
    while(~scanf("%d",&n))
    {
        if(n==0) break;
        if(n>=3) printf("Bob\n");
        else printf("Alice\n");
    }
    return 0;
}
时间: 2024-10-19 20:39:02

POJ 2484 A Funny Game的相关文章

POJ 2484 A Funny Game(博弈)

题目地址:POJ 2484 很简单的智力题...当n>4时候,后手方完全可以根据剩下的奇偶情况使得剩下了偶数个并且对称,然后每当先手出一次,后手就可以模仿着先手在对称的地方出一次,这样的话,后方是必胜的. 代码如下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.

POJ 2484

很明显地,我们知道,当N=1,2时,先手胜.当N=3时,可以把取走中间一个硬币,得到1,1.依然是先手胜.当N=4时,取走中间两点得到1,1,即先手依然取胜.当N=5时,取走中间1点,依然先手胜. 于是,当ALICE取走开头的硬币后,即得到一条链.那么,只需BOB把这条链平均分成两半,做对称操作,即可使ALICE必败. 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int main(){

poj 2484 Cow Exhibition 【变形0-1背包】

题目:poj 2484 Cow Exhibition 题意:给出n头牛,每头牛有一个幸运值 si 和聪明值 ti ,现在要选出一些牛,让两个值的和最大,前提是sum(si)和sum(ti)都是非负值. 分析:此题数据量不大,可以暴搜+剪枝水过. 这里要说的是0-1背包的思想,这个题目明显的变形就是物品有两个属性值,而且都要选最大的. 那么我们可不可以把一个值固定下来来求另一个值的最大值,根据0-1背包的思想,定义状态:dp[i]表示装入一些物品使得sum(si)的时候最大的sum(ti)的值.

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

每天一道博弈论之“A funny game”(poj 2484)

题意: n枚硬币排成一个环,操作为可以选择相邻的两个取走(相邻指的是最开始相邻,即不会自动补成环).问先手胜还是后手胜. 题解: 首先我们考虑1和2,则明显是先手必胜. 如果大于等于3,那么先手取后一定是一条链.这时我们一定可以把这一条链变成两条相等的链.(如果链长是奇数就取掉最中间的那个,否则取掉最中间的两个).那么一个游戏就被分成了两个相同的独立游戏.那么假如对方在某一游戏中进行了一种操作,我们只要在另一游戏中重复该操作即可.那么可以保证我们面临的两个游戏状态一定相同,而对方面临的一定不同.

POJ 2484 A Funny Game(智商博弈)

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6397   Accepted: 3978 Description Alice and Bob decide to play a funny game. At the beginning of the game they pick n(1 <= n <= 106) coins in a circle, as Figure 1 shows. A move consists i

【POJ 2484】A Funny Game

Description Alice and Bob decide to play a funny game. At the beginning of the game they pick n(1 <= n <= 10 6) coins in a circle, as Figure 1 shows. A move consists in removing one or two adjacent coins, leaving all other coins untouched. At least

[原博客] POJ 2484 A Funny Game

题目链接题意:有n个硬币排成一圈,两个人轮流操作,每次可以取走一个或者相邻的连个硬币(只算最开始相邻的,取之后才相邻的不算),问先手必胜还是必败. 这个题可以证明若n>=3,则先手必败.对称博弈若n>=3,先手第一次必然把这个环拆成一个链,然后无论这条链长度的奇偶,后手总是可以把这条链分成两条相等的链,于是先手在一条链上做什么,后手就可以做什么.知道先手无法操作,后手胜. #include<iostream> #include<cstdio> #include<a

POJ 2484 A Funny Game(找规律)

题目链接 #include<iostream> #include<cstdio> using namespace std; int main() { int n; while(scanf("%d",&n)&&n) {//alice先把环破坏,变成链,然后bob只要在链中间取1或2个 //连续的coins,让链变成左右对称的两条,bob就必胜 if(n==1||n==2) printf("Alice\n"); else