Codeforces - 346A - Alice and Bob - 简单数论

http://codeforces.com/problemset/problem/346/A

观察了一下,猜测和他们的最大公因数有关,除以最大公因数前后结果是不会变的。

那么怎么证明一定是有n轮呢?我猜就是因为现在至少有几个是互质的,所以总是可以构造出1?具体怎么证明呢?还是看看别人的思路吧……

首先最终停止的状态一定是一个等差数列,这个是毫无疑问的。设首项为d,那么肯定停止于d,2d,3d,...,n,那么很显然d就是他们的最大公因数啊……对哦?!

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int n;
int a[105];

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    int g=a[0];
    for(int i=1;i<n;i++){
        g=__gcd(g,a[i]);
    }

    for(int i=0;i<n;i++){
        a[i]/=g;
    }

    int maxa=*max_element(a,a+n);

    int d=maxa-n;
    if(d%2)
        puts("Alice");
    else
        puts("Bob");

}

原文地址:https://www.cnblogs.com/Yinku/p/10327661.html

时间: 2024-11-13 09:42:49

Codeforces - 346A - Alice and Bob - 简单数论的相关文章

Codeforces 346A Alice and Bob 博弈

http://codeforces.com/problemset/problem/346/A 题意:A和B两个人进行游戏,每人轮流操作,每次从集合(集合元素个数n<=100)取出两个数x,y将|x-y|放入集合中 (|x-y|不存在集合中)不能操作则输 最终游戏结束的标志是无法取出两个数字,他们的差值不在序列中.也就是说,最终状态是一个首项等于公差的等差序列.求出这个等差数列的项数-n,就是游戏进行的回合. 所以我们要先求出首项.设首项为d,接下来就是d+d,d+2d-.后面几项都是首项的倍数

Codeforces Round #201 (Div. 1) / 346A Alice and Bob

#include <cstdio> #include <algorithm> using namespace std; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int n[100+10]; int main() { int t,maxn = 0; scanf("%d",&t); for(int i=0; i<t; i++) { scanf("%d",&n[i]);

codeforces_346A Alice and Bob(数学)

题目链接:http://codeforces.com/problemset/problem/346/A 参考链接:http://blog.csdn.net/loy_184548/article/details/50174615 感受到数学在博弈论中的强大. 考虑最后终止状态的序列-无法取出任意两个数他们的差值不存在这个序列中:那么这必定是个首项等于公差的等差序列 而这个序列是 d 2d 3d....,因此可以通过a[1] a[2] a[3] ...的最大公约数得到 然后计算有几个数没在数组中,判

博弈问题-Alice与Bob拿牌游戏

Description Bob and Alice play a game, and Bob will play first. Here is the rule of the game: 1) There are N stones at first; 2) Bob and Alice take turns to remove stones. Each time, they can remove p^k stones. p is prime number, such as 2, 3, 5, ...

Sdut 2108 Alice and Bob(数学题)(山东省ACM第四届省赛D题)

题目地址:sdut 2608 Alice and Bob Alice and Bob Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynomial like this: (a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*....

关于TJOI2014的一道题——Alice and Bob

B Alice and Bob ?输入输出文件: alice.in/alice.out ?源文件名: alice.cpp/alice.c/alice.pas ? 时间限制: 1s 内存限制: 128M 题目描述 Alice 和 Bob 发明了一个新的游戏.给定一个序列{x0,x1,··· ,xn?1}.Alice得 到一个序列 {a0,a1,··· ,an?1},其中 ai 表示以 xi 结尾的最长上升子序列的长 度:Bob 得到一个序列 {b0,b1,··· ,bn?1},其中 bi 表示以

XTU 1209 Alice and Bob (博弈)

Alice and Bob Accepted : 174   Submit : 342 Time Limit : 1000 MS   Memory Limit : 65536 KB Problem Description The famous "Alice and Bob" are playing a game again. So now comes the new problem which need a person smart as you to decide the winne

Sicily 1732 Alice and Bob (二进制数的最大公约数)

链接: http://soj.me/1732 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description: Alice is a beautiful and clever girl. Bob would like to play with Alice. One day, Alice got a very big rectangle and wanted to divide it into small square pieces.

博弈 HDOJ 4371 Alice and Bob

题目传送门 题意:Alice和 Bob轮流写数字,假设第 i 次的数字是S[i] ,那么第 i+1 次的数字 S[i+1] = S[i] + d[k] 或 S[i] - d[k],条件是 S[i+1] <= n && S[i-1]<S[i+1] 分析:设d[]最小的数字为mn,除此之外设为d,第一次A写了0,第二次B如果写了d,那么A可以写d - mn,确保自己有数直到胜利:如果B第一次写了mn,那么以后的数都只能加mn直到>n,这个很好判断谁胜利. 收获:博弈题想到了就