Skip to content

11107: 【原1107】二哥的赌博

题目

题目描述

author: Qiming Chen 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1107

Description

二哥听说了这样一个游戏,于是拿来和他的室友赌博.

桌子上1~n有n个数(n为0就表示一个数都没有),两个人轮流选数,每次一个人要选一个没被拿走的数x,然后把x和x所有的约数拿走,不能操作了就算输.

这两个无聊的人要玩m局,每次二哥都先手拿数,而且二哥是一个超级聪明的人,问二哥在每一局里是否能赢?

有一只小鸟说这道题是送分的

Input Format

第1行,一个数字m,表示游戏一共有m局. 第2~m+1行,一个数字n_i表示这局游戏两个人要取的数是1~n_i.

Output Format

m行,每行一个单词 "yes" 或者 "no",表示这一局二哥是否能够获胜.

Restrictions

m<=2,000

n<=10,000,000

Sample Input 1

1
1

Sample Output 1

yes

Sample Input 2

2
1
2

Sample Output 2

yes
yes

Sample Input 3

1
0

Sample Output 3

no

FineArtz's solution

/* 二哥的赌博 */
#include <iostream>
using namespace std;

int main(){
    int m;
    cin >> m;
    while (m--){
        int t;
        cin >> t;
        if (t == 0)
            cout << "no" << endl;
        else
            cout << "yes" << endl;
    }
    return 0;
}

ligongzzz's solution

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int m;
    cin >> m;

    vector<int> mdata(m);

    int maxn = 0;
    for (int i = 0; i < m; ++i) {
        cin >> mdata[i];
        maxn = mdata[i] > maxn ? mdata[i] : maxn;
    }

    vector<bool> isNum(maxn + 1, true);
    vector<int> cnt(maxn + 1, 0);
    for (int i = 2; i <= maxn; ++i) {
        if (!isNum[i]) {
            cnt[i] = cnt[i - 1];
            continue;
        }
        for (int j = 2 * i; j <= maxn; j += i)
            isNum[i] = false;
        cnt[i] = cnt[i - 1] + 1;
    }

    for (auto p : mdata) {

    }

    return 0;
}

WashSwang's solution

#include <iostream>
using namespace std;
int m,n;
int main() {
    cin>>m;
    for (int i=0;i<m;++i)
    {
        cin>>n;
        if (n!=0) cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }
    return 0;
}