Codeforces 347C Alice and Bob

来源:互联网 发布:中文安卓编程王者荣耀 编辑:程序博客网 时间:2024/05/17 07:26

题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46782


解题思路:首先对于a和b,如果b>a且gcd(a,b)=1的话,则按照游戏规则可以求解出1->b之间的所有整数,每次操作只能增加一个整数。

因此我们可以先求解出所有数的最大公约数,用最大的数除以最大公约数d则可以得到我们能够继续添加的数的数目,如果结果为奇数则第一个人赢,如果结果为偶数则第二个人赢。

#include <ctime>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 110;int arr[maxn];int gcd(int a, int b) {    return b == 0 ? a : gcd(b, a % b);}int main() {    int n;    int d = 0;    scanf("%d", &n);    for(int i = 1; i <= n; ++i) {        scanf("%d", &arr[i]);        d = gcd(d, arr[i]);    }    sort(arr + 1, arr + n + 1);    int cnt = arr[n]/d - n;    if(cnt % 2) {        printf("Alice\n");    } else {        printf("Bob\n");    }    return 0;}


0 0
原创粉丝点击