zoukankan      html  css  js  c++  java
  • 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;
    }
    


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

  • 相关阅读:
    Oracle Data Integrator 12c-----场景(Scenario)和调度(Schedule)
    Oracle 12c 用户创建、角色、权限
    CDB和PDB的创建、连接、启动、关闭
    Oracle Data Integrator 12c----包(Package)
    Oracle Data Integrator 12c-第一个映射
    Oracle Data Integrator 12c-模型(Model)和 数据存储(DataStore)
    解锁scott账户方法
    ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务
    VirtualBox内Linux系统怎样与Windows共享文件夹
    Changing the Language Used in ODI Studio
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4856907.html
Copyright © 2011-2022 走看看