• Codeforces Round #264 (Div. 2) C Gargari and Bishops 【暴力】


    称号:


    意甲冠军:给定一个矩阵,每格我们有一个数,然后把两个大象,我希望能够吃的对角线上的所有数字。我问两个最大的大象可以吃值。


    分析:这种想法是暴力的主题,计算出每一格放象的话能得到多少钱,然后求出两个不冲突的最大值。我比赛的时候写的方法是先求出每个值,编号之后存到数组里面,然后在通过一系列处理得到,总之非常麻烦。写了一个多小时。最后才发现有一点小错误,没时间了。初始例子也没有通过。


    然后看了下别人写的,太简洁了。直接用行和列和和差就能够直接求出来。看来代码能力还很有待提高啊。


    我的AC代码:

    #include <cstdio>
    #include <iostream>
    #include <queue>
    #include <cstring>
    #include <algorithm>
    #include <stack>
    #include <vector>
    #include <utility>
    #include <cmath>
    using namespace std;
    
    const long long N = 2200;
    long long mp[N][N],num[N][N];
    vector<long long> sum1,sum2;
    long long n;
    int main()
    {
        //freopen("Input.txt","r",stdin);
        while(~scanf("%lld",&n))
        {
            for(long long i=1; i<=n; i++)
            {
                for(long long j=1; j<=n; j++)
                    scanf("%lld",&mp[i][j]);
            }
            for(long long i=n; i>=1; i--)
            {
                long long tmp=0;
                for(long long x=1,y=i; x<=n; x++,y++)
                {
                    tmp+=mp[x][y];
                }
                sum1.push_back(tmp);
            }
            for(long long i=2; i<=n; i++)
            {
                long long tmp=0;
                for(long long x=i,y=1; x<=n; x++,y++)
                    tmp+=mp[x][y];
                sum1.push_back(tmp);
            }
    
            for(long long i=1; i<=n; i++)
            {
                long long tmp=0;
                for(long long x=i,y=1; x>=1; x--,y++)
                {
                    tmp+=mp[x][y];
                }
                sum2.push_back(tmp);
            }
            for(long long i=2; i<=n; i++)
            {
                long long tmp=0;
                for(long long x=n,y=i; y<=n; x--,y++)
                    tmp+=mp[x][y];
                sum2.push_back(tmp);
            }
            memset(num,0,sizeof(num));
            long long fx=1,fy=n;
            for(long long i=1;i<=n;i++)
            {
                long long xx=fx,yy=fy;
                for(long long j=1;j<=n;j++)
                {
                    num[i][j]=sum2[xx-1]+sum1[yy-1]-mp[i][j];
                    xx++,yy--;
                    //printf("%lld ",num[i][j]);
                }
                fx++,fy++;
            }
            long long ans[3]={-1,-1};
            long long x[3],y[3];
            for(long long i=1;i<=n;i++)
            {
                for(long long j=1;j<=n;j++)
                {
                    long long p=(i+j)%2;
                    if(num[i][j]>ans[p])
                    {
                        ans[p]=num[i][j];
                        x[p]=i,y[p]=j;
                    }
                }
            }
            printf("%lld
    ",ans[0]+ans[1]);
            printf("%lld %lld %lld %lld
    ",x[0],y[0],x[1],y[1]);
            sum1.clear(),sum2.clear();
        }
        return 0;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    十分钟学会Java8:lambda表达式和Stream API
    史上最全的Spring Boot Cache使用与整合
    史上最全的Spring Boot Starter开发手册
    深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)
    深入理解Mybatis技术与原理
    c++入门之命名空间存在的意义
    机器学习第一篇——最近邻kNN
    Python学习第十八篇——低耦合函数设计思想
    Python学习第十六篇——异常处理
    Python学习第十五篇——类继承和类实例化
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4856907.html
Copyright © 2020-2023  润新知