zoukankan      html  css  js  c++  java
  • codeforces Gargari and Bishops(很好的暴力)

     1 /*
     2     题意:给你一个n*n的格子,每一个格子都有一个数值!将两只bishops放在某一个格子上,
     3     每一个bishop可以攻击对角线上的格子(主对角线和者斜对角线),然后会获得格子上的
     4     数值(只能获取一次)。要求输出两个bishops获取的最大值以及它们所在的位置!
     5     
     6     
     7     思路:直接暴力!....不错的暴力题目! 
     8     首先我们都知道每一条主对角线上的横纵坐标的和相同,每一条副对角线上的横纵坐标的差相同!
     9     那么我们在输入的时候就可以将所有对角线上的数值之和求出来了! 
    10     
    11     最后我们发现如果要获得最大值,那么还有一条就是两个bishops所在的对角线不能相交在
    12     同一个格子上!只要满足两个bishops的哼纵坐标之和互为奇偶就可以了! 
    13     
    14     在所有格子中找到横纵坐标之和为奇数并且获得对角线上数值最大的格子和横纵坐标之
    15     和为偶数并且获得对角线上数值最大的格子! 
    16     二者最大获得值相加就是最终的答案了! 
    17 */
    18 #include<iostream>
    19 #include<cstring>
    20 #include<cstdio>
    21 #include<algorithm>
    22 #define N 2005
    23 using namespace std;
    24 typedef long long LL; 
    25 int num[N][N];
    26 LL sumN[N*2], sumM[N*2];
    27 
    28 int n;
    29 
    30 int main(){
    31     while(scanf("%d", &n)!=EOF){
    32         memset(sumN, 0, sizeof(sumN));
    33         memset(sumM, 0, sizeof(sumM));
    34         for(int i=1; i<=n; ++i)
    35               for(int j=1; j<=n; ++j){ 
    36                 scanf("%d", &num[i][j]);
    37                 sumN[i+j]+=num[i][j];//横纵坐标之和为i+j的对角线的数值和 
    38                 sumM[i-j+n]+=num[i][j];//横纵坐标之差为i-j的对角线的数值和 
    39             }
    40     
    41         LL maxOdd=-1, maxEvent=-1, s;
    42         int x1, x2, y1, y2;
    43         for(int i=1; i<=n; ++i)
    44              for(int j=1; j<=n; ++j){
    45                  if((i+j)&1){ 
    46                      if(maxOdd<(s=sumN[i+j]+sumM[i-j+n]-num[i][j])){
    47                          maxOdd=s;//横纵坐标之和为奇数并且获得对角线上数值最大的格子
    48                          x1=i;
    49                          y1=j;
    50                      }
    51                 }
    52                 else{
    53                      if(maxEvent<(s=sumN[i+j]+sumM[i-j+n]-num[i][j])){
    54                          maxEvent=s;//横纵坐标之和为偶数并且获得对角线上数值最大的格子
    55                          x2=i;
    56                          y2=j;
    57                      }
    58                 }
    59             }
    60 
    61         printf("%lld
    ",maxOdd+maxEvent);     
    62         printf("%d %d %d %d
    ", x1, y1, x2, y2);
    63     }
    64      return 0;
    65 } 
  • 相关阅读:
    《Google 软件测试之道》摘录
    UIRecorder环境搭建及录制实现
    网易《人性的哲学与科学》笔记
    网易《公正:该如何做是好?》笔记(不定时更新)
    自助饮料机实现
    网易《社会心理学》笔记(不定时更新)
    uiautomator +python 安卓UI自动化尝试
    doc
    doc
    doc
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3946876.html
Copyright © 2011-2022 走看看