美文网首页游戏夜读
c++ 网易------俄罗斯方块

c++ 网易------俄罗斯方块

作者: PreCon | 来源:发表于2019-07-12 08:51 被阅读1次

    题目描述:
    小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块。因为它比较古老,所以规则和一般的俄罗斯方块不同。
    荧幕上一共有 n 列,每次都会有一个 1 x 1 的方块随机落下,在同一列中,后落下的方块会叠在先前的方块之上,当一整行方块都被占满时,这一行会被消去,并得到1分。
    有一天,小易又开了一局游戏,当玩到第 m 个方块落下时他觉得太无聊就关掉了,小易希望你告诉他这局游戏他获得的分数。
    输入描述:
    第一行两个数 n, m
    第二行 m 个数,c1, c2, ... , cm , ci 表示第 i 个方块落在第几列
    其中 1 <= n, m <= 1000, 1 <= ci <= n
    输出描述:
    小易这局游戏获得的分数

    思路:首先,判断分数肯定大于0的情况,于是将所有的数据都加到容器中,统计每个数字的个数,个数最小的那个就是得分;
    其次得分小于0,将容器中的重复数字都删掉,然后判断这个容器的大小如果小于荧幕的列数,那么得分肯定等于0;

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n, m;
        cin >> n >> m;
        int tmp;
        vector<int>arr,arrs;
        for (int i = 0; i < m; i++)
        {
            cin >> tmp;
            arr.push_back(tmp);
        }
        sort(arr.begin(), arr.end());
        vector<int>::iterator it;
        arrs = arr;
        it = unique(arrs.begin(), arrs.end());
        arrs.erase(it, arrs.end());
        if (arrs.size() < n)
            cout << 0 << endl;
        else
        {
            arr.push_back(-1);
            int min = m;
            int flag = 1;
            for (int i = 0; i < m; i++)
            {
                if (arr[i + 1] == arr[i])flag++;
                else
                {
                    if (flag < min)
                    {
                        min = flag;
                    }
                    flag = 1;
                }
            }
            cout << min << endl;
        }
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:c++ 网易------俄罗斯方块

        本文链接:https://www.haomeiwen.com/subject/gauskctx.html