首页 > 网易互娱笔试
头像
None-hhh
编辑于 2020-08-12 22:16
+ 关注

网易互娱笔试

菜鸡纯暴力竟然AC2道,写的超级无敌复杂,还剩1小时直接交卷了

1打麻将
int main()
{
    int T;
    cin >> T;
    for (int i = 0; i < T; ++i)
    {
        vector<string> s(7);
        map<char, vector<int>> hash;
        for (int j = 0; j < 7; ++j)
        {
            cin >> s[j];
            char x = s[j][0];
            char y = s[j][1];
            hash[y].push_back(x);
        }
        int len1 = hash['T'].size();
        int len2 = hash['B'].size();
        int len3 = hash['W'].size();
        if (hash['T'].size() > 3 || hash['B'].size() > 3 || hash['W'].size() > 3)
        {
            cout << "NO" << endl;
            continue;
        }
        
        map<int, int> flag;
        for (int l = 0; l < len1; ++l)
        {
            if (hash['T'][l] == '1' || hash['T'][l] == '4' || hash['T'][l] == '7')
            {
                flag[1]++;
            }
            else if(hash['T'][l] == '2' || hash['T'][l] == '5' || hash['T'][l] == '8')
            {
                flag[2]++;
            }
            else if(hash['T'][l] == '3' || hash['T'][l] == '6' || hash['T'][l] == '9')
            {
                flag[3]++;
            }
        }
        if (flag.size() != 1)
        {
            cout << "NO" << endl;
            continue;
        }
       
        for (int l = 0; l < len2; ++l)
        {
            if (hash['B'][l] == '1' || hash['B'][l] == '4' || hash['B'][l] == '7')
            {
                flag[1]++;
            }
            else if (hash['B'][l] == '2' || hash['B'][l] == '5' || hash['B'][l] == '8')
            {
                flag[2]++;
            }
            else if (hash['B'][l] == '3' || hash['B'][l] == '6' || hash['B'][l] == '9')
            {
                flag[3]++;
            }
        }
        if (flag.size() != 2)
        {
            cout << "NO" << endl;
            continue;
        }

        for (int l = 0; l < len3; ++l)
        {
            if (hash['W'][l] == '1' || hash['W'][l] == '4' || hash['W'][l] == '7')
            {
                flag[1]++;
            }
            else if (hash['W'][l] == '2' || hash['W'][l] == '5' || hash['W'][l] == '8')
            {
                flag[2]++;
            }
            else if (hash['W'][l] == '3' || hash['W'][l] == '6' || hash['W'][l] == '9')
            {
                flag[3]++;
            }
        }
        if (flag.size() != 3)
        {
            cout << "NO" << endl;
            continue;
        }
        if (flag[1] > 3 || flag[2] > 3 || flag[3] > 3)
            cout << "NO" << endl;
        else
            cout << "YES" << endl;
    }
}


2十字斩,这个思想
void cal_sum(vector<vector<int>> & a, vector<vector<int>> & t)
{
    int row = a.size();
    int col = a[0].size();
    vector<int> r_sum(row, 0);
    vector<int> c_sum(row, 0);
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
            r_sum[i] += a[i][j];
    }
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
            c_sum[i] += a[j][i];
    }
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
            t[i][j] = r_sum[i] + c_sum[j] - a[i][j];
    }
}
void find_index(vector<vector<int>> & a, vector<int> & pos)
{
    int row = a.size();
    int col = a[0].size();
    int max_value = -1;
    //int pos_i, pos_j;
    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)
        {
            if (a[i][j] > max_value)
            {
                max_value = a[i][j];
                pos[0] = i;
                pos[1] = j;
            }
        }
    }
}
void adj_v(vector<vector<int>> & a, vector<int> & pos)
{
    a.erase(a.begin() + pos[0]);
    int row = a.size();
    for (int i = 0; i < row; ++i)
    {
        a[i].erase(a[i].begin() + pos[1]);
    }
}

int main()
{
    int N;
    cin >> N;
    vector<vector<int>> a(N, vector<int>(N));
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            cin >> a[i][j];
        }
    }
    int cnt = N;
    while (cnt > 0)
    {
        if (cnt == 1)
        {
            cout <<  1 << " " << 1 << endl;
            break;
        }

        vector<vector<int>> max_sum(N, vector<int>(N)); // 保存每行每列的和
        cal_sum(a, max_sum); // 算每行每列的和
        vector<int> pos(2);//坐标
        find_index(max_sum, pos);//找最大和的坐标
        adj_v(a, pos);//删除这一行和这一列
        cout << pos[0] + 1 << " " << pos[1] + 1 << endl;

        cnt--;
    }

}



全部评论

(10) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐