zoukankan      html  css  js  c++  java
  • [编程题-网易]扫描透镜

    [编程题-网易]扫描透镜

    在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只 有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇. 问:兰博最多可以清理多少个蘑菇?
    注意:每个方格被扫描一次只能清除掉一个蘑菇。 

    输入描述:
    第一行三个整数:N,M,K,(1≤N,M≤20,K≤100),N,M代表了草地的大小;
    接下来K行,每行两个整数x,y(1≤x≤N,1≤y≤M).代表(x,y)处提莫种了一个蘑菇.
    一个方格可以种无穷个蘑菇.

    第一次提交,理解错了题意

    #include<iostream>
    #include<vector>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n, m, k;
        while (cin >> n >> m >> k)
        {
    
            vector<vector<int>> mat(n, vector<int>(m, 0));
            for (int i = 0; i<k; i++)
            {
                int x, y;
                cin >> x >> y;
                mat[x - 1][y - 1]++;
            }
    
            vector<vector<int>> sum(max(n - 2, 1), vector<int>(max(m - 2, 1), 0));
            
            for (int i = 0; i<sum.size(); i++)
            for (int j = 0; j<sum[0].size(); j++)
            {
                    for (int p = i; p<min(i + 3, n); p++)
                    for (int q = j; q<min(j + 3, m); q++)
                        sum[i][j] += mat[p][q];
            }
            
            
            int ans = 0;
            for (int i = 0; i<sum.size(); i++)
            for (int j = 0; j<sum[0].size(); j++)
            {
                    for (int p = i; p<sum.size(); p++)
                    for (int q = j; q<sum[0].size(); q++)
                    {
                        int dup = 0;
                        for (int u = p; u<min(i + 3, n); u++)
                        for (int v = q; v<min(j + 3, m); v++)
                                dup += mat[u][v];
                        ans = max(ans, sum[i][j] + sum[p][q] - dup);
                    }
            }
            cout << ans << endl;
        }
    }

    正确程序

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int n,m,k;
        while(cin>>n>>m>>k)
        {
            vector<vector<int>> a(n,vector<int>(m,0)),b;
            for(int i=0;i<k;i++)
            {
                int x,y;
                cin>>x>>y;
                a[x-1][y-1]++;
            }
            int ans=0;
            for(int i=0;i<n-2;i++)
            for(int j=0;j<m-2;j++)
            {
                b=a;
                int sum1=0;
                for(int k=i;k<i+3;k++)
                for(int l=j;l<j+3;l++)
                {
                    if(b[k][l]>0)
                    {
                        sum1++;
                        b[k][l]--;
                    }
                }
                //
                for(int ii=0;ii<n-2;ii++)
                for(int jj=0;jj<m-2;jj++)
                {
                    int sum2=0;
                    for(int k=ii;k<ii+3;k++)
                    for(int l=jj;l<jj+3;l++)
                    {
                        if(b[k][l]>0)
                        {
                            sum2++;
                        }
                    }
                    ans=max(ans,sum1+sum2);
                }
                //     
            }
            cout<<ans<<endl;  
        }
    }
  • 相关阅读:
    linux基础
    spring学习 之 spring与java web整合原理示例
    idea 使用tomcat插件创建Java web项目
    xml解析
    spring注解学习之 九 DeferredImportSelector接口
    springboot学习一 idea配置文件乱码
    "从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总
    通过Cookie存放用户登录信息以及安全性问题
    从数据库所有表中查找特定的数据(模糊匹配)
    CentOS 7 系列修改默认网卡名为 eth0 的两种方法
  • 原文地址:https://www.cnblogs.com/learning-c/p/5742676.html
Copyright © 2011-2022 走看看