Codeforces 463C Gargari and Bishops

首先要记得黑白染色原理,题目里要求矩阵里的两个点,两个点对应的对角线不能有重合点,其实就是黑白染色嘛,找坐标相加为奇数和坐标相加为偶数的点即可

然后就是题目要求的和值最大,暴力不行,所以预处理出来每个对角线的和值,发现其实每个对角线要么是 y=x+b或者y=-x+b,b是独一无二的,所以以b为特征点来记录每个对角线的和值,当然b可能为负,所以人为的+3*n使其为正(其实+n就可以为正,+3*n是因为还要跟x+y=b区分出来)。

注意处理细节,然后还是蛮简单的

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define LL __int64
using namespace std;
int n;
int  mat[2010][2010];
LL sum[4020*3];
int main()
{
    while (scanf("%d",&n)!=EOF)
    {
        for (int i=1;i<=n;i++)
            for(int j=1;j<=n;j++) scanf("%d",&mat[i][j]);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++){
            sum[i+j]+=(LL)mat[i][j];
            sum[i-j+3*n]+=(LL)mat[i][j];
        }
        LL ans1=-1,ans2=-1;
        int x1,y1,x2,y2;
        for (int i=1;i<=n;i++){
            for (int j=1;j<=n;j++){
                LL ret=sum[i+j]+sum[i-j+3*n];
                ret-=(LL)mat[i][j];
                if ((i+j)&1){
                    if (ans1<ret){
                        ans1=ret;
                        x1=i;
                        y1=j;
                    }
                }
                else{
                    if (ans2<ret){
                        ans2=ret;
                        x2=i;
                        y2=j;
                    }
                }
            }
        }
        //cout<<sum[x1+y1]<<" "<<sum[x1-y1+3*n]<<endl;
        //cout<<ans1<<" "<<ans2<<endl;
        printf("%I64d\n",ans1+ans2);
        printf("%d %d %d %d\n",x1,y1,x2,y2);
    }
    return 0;
}
时间: 2024-10-13 17:38:50

Codeforces 463C Gargari and Bishops的相关文章

【CodeForces】Gargari and Bishops

根据贪心可以知道,放置的教主必须不能相互攻击到(也就是不在一条对角线上)才可以使得结果最大化. 根据观察可以得到教主相互不攻击的条件是他的坐标和互为奇偶(x + y) 之后直接暴力,处理每个坐标对角线的和就好 时间复杂度 0(n ^ 2) #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; const int maxn = 20

codeforces Gargari and Bishops(很好的暴力)

1 /* 2 题意:给你一个n*n的格子,每一个格子都有一个数值!将两只bishops放在某一个格子上, 3 每一个bishop可以攻击对角线上的格子(主对角线和者斜对角线),然后会获得格子上的 4 数值(只能获取一次).要求输出两个bishops获取的最大值以及它们所在的位置! 5 6 7 思路:直接暴力!....不错的暴力题目! 8 首先我们都知道每一条主对角线上的横纵坐标的和相同,每一条副对角线上的横纵坐标的差相同! 9 那么我们在输入的时候就可以将所有对角线上的数值之和求出来了! 10

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

题目: 题意:给出一个矩阵,每一格都有一个数字,然后放入两个象,想可以吃掉对角线上所有的数字,问两个象能吃掉的最大值. 分析:这个题目思路就是暴力,暴力计算出每一格放象的话能得到多少钱,然后求出两个不冲突的最大值,我比赛的时候写的方法是先求出每一个值,编号之后存到数组里面,然后在通过一系列处理得到,总之很麻烦,写了一个多小时,最后才发现有一点小错误,没时间了.初始样例也没有通过. 然后看了下别人写的,太简洁了.直接用行和列和和差就可以直接求出来.看来代码能力还非常有待提高啊. 我的AC代码: #

Codeforces 463D Gargari and Permutations(求k个序列的LCS)

题目链接:http://codeforces.com/problemset/problem/463/D 题目大意:给你k个序列(2=<k<=5),每个序列的长度为n(1<=n<=1000),每个序列中的数字分别为1~n,求着k个序列的最长公共子序列是多长?解题思路:由于每个序列的数字分别为1~n即各不相同,所以可以用pos[i][j]记录第i个序列中j的位置.设dp[i]表示以i结尾的最长公共子序列长度,那么我们可以按顺序遍历第一个序列的位置i,再在第一个序列中枚举位置j(j<

codeforces 463D Gargari and Permutations(dp)

题目 参考网上的代码的... //要找到所有序列中的最长的公共子序列, //定义状态dp[i]为在第一个序列中前i个数字中的最长公共子序列的长度, //状态转移方程为dp[i]=max(dp[i],dp[j]+1); j<i //先预处理出两个数在所有序列中的位置关系, //例如两个数a和b,只要在任意一个序列中a在b的后面,则记after[a][b]=1. //在递推的时候如果!after[a][b],则进行状态转移. #include <cstdio> #include <cs

Codeforces 463D. Gargari and Permutations【DP】

题目大意: 给出1~n的k个排列(2<=k<=5),要求其中的最长公共子序列. 做法: 算是不难的DP,dp[i]表示以i为结尾的最长公共子序列的长度,由于每个数在一个排列中只可能出现一次,我们用一个二维数组pos[i][j]表示数字j在第i行出现在第几个位置,再用一个数组cnt[i] 记录i出现了多少次:当第i个数出现了k次之后,说明能够以该数为结尾构成公共子序列,那么dp[i]=max(dp[j]+1),其中i,j满足pos[u][i]>pos[u][j](1<=u<=k

CodeForces463C Gargari and Bishops(贪心)

CodeForces463C 题目大意: 在国际象棋的棋盘上放两个主教,这个两个主教不能攻击到同一个格子,最后的得分是这两个主教的攻击的格子上的分数之和. 求最大的分数. 解题思路: 由于攻击的范围是对角线,所以两个主教一个在黑格,一个在白格.画个图就能够发现一旦一个主教放在了黑格.那么剩下的黑格是都不能在放主教的,否则就是攻击到同样的格子. 所以求出每条对角线的和,通过这个得出每一个格子作为主教的得分,最后黑白格分开讨论. 代码: #include <cstdio> #include <

Codeforces Round #264 (Div. 2)[ABCDE]

Codeforces Round #264 (Div. 2)[ABCDE] ACM 题目地址: Codeforces Round #264 (Div. 2) 这场只出了两题TAT,C由于cin给fst了,D想到正解快敲完了却game over了... 掉rating掉的厉害QvQ... A - Caisa and Sugar[模拟] 题意: Caisa拿s美元去超市买sugar,有n种sugar,每种为xi美元yi美分,超市找钱时不会找美分,而是用sweet代替,当然能用美元找就尽量用美元找.他

Codeforces Round #264 (Div. 2) C

题目: C. Gargari and Bishops time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Gargari is jealous that his friend Caisa won the game from the previous problem. He wants to prove that he is a g