【CCF计算机资格认证】201912-2回收站选址C++

在这里插入图片描述

#include "iostream"
#include "vector"
#include "map"

using namespace std;

int calculate(map<int, vector<int>> m, int x, int y)
{
    int score1 = 0;
    for (int i : m[x - 1])
    {
        if (i == y - 1 || i == y + 1)
        {
            score1 += 1;
            if (score1 == 2)
            {
                break;
            }
        }
    }

    int score2 = 0;
    for (int i : m[x + 1])
    {
        if (i == y - 1 || i == y + 1)
        {
            score2 += 1;
            if (score2 == 2)
            {
                break;
            }
        }
    }
    return score1 + score2;
}

bool find_y(map<int, vector<int>> m, int x, int y)
{
    int cross = 0;     // 上下有没有垃圾
    for (int i : m[x]) // 找y-1和y+1
    {
        if (i == y - 1 || i == y + 1)
        {
            cross += 1;
        }
    }
    if (cross != 2)
    {
        return false;
    }
    else
    {
        return true;
    }
}

bool find_x(map<int, vector<int>> m, vector<int> key_x, int x, int y)
{
    int cross = 0; // 左右有没有垃圾
    for (int i : key_x)
    {
        if (i == x - 1 || i == x + 1)
        {
            cross += 1;
        }
    }
    if (cross < 2)
    {
        return false;
    }
    else
    {
        cross = 0;
        for(int i:m[x-1])
        {
            if(i==y)
            {
                cross += 1;
                break;
            }
        }
        for(int i:m[x+1])
        {
            if(i==y)
            {
                cross += 1;
                break;
            }
        }
        if(cross<2)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}


int main(int argc, char const *argv[])
{
    map<int, vector<int>> m;
    int n, x, y;
    cin >> n;

    vector<int> score(5, 0);

    vector<int> key_x;

    for (int i = 0; i < n; i++)
    {
        cin >> x >> y;
        m[x].push_back(y);
    }

    map<int, vector<int>>::iterator iter;
    for (iter = m.begin(); iter != m.end(); iter++)
    {
        x = iter->first;
        key_x.push_back(x);
    }

    for (int x : key_x)
    {
        for (int y : m[x])
        {
            if (find_x(m, key_x, x, y) && find_y(m, x, y))
            {
                // cout << "score: " << calculate(m, x, y) << endl;
                score[calculate(m, x, y)] += 1;
            }
        }
    }

    for (int s : score)
    {
        cout << s << endl;
    }

    return 0;
}
发布了76 篇原创文章 · 获赞 128 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/104081439