Gargari and Bishops CodeForces - 463C
阿新 • • 發佈:2021-07-18
原題連結
考察:思維
錯誤思路:
預處理對角線和,列舉每一個點,發現與該點相鄰的點都不衝突.
錯誤原因:
但凡圖畫大點就可以發現不止是相鄰的點,也不是用相鄰的點對角線路過的點.
思路:
正解是與列舉點奇偶性不同的點.....直接暴力列舉完事.
Code
#include <iostream> #include <cstring> using namespace std; typedef long long LL; const int N = 2010; int mp[N][N],n; LL zs[N<<1],fs[N<<1]; void init() { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { zs[j-i+n]+=mp[i][j]; fs[j+i]+=mp[i][j]; } } void solve()//兩座標同奇或同偶數,就不合法 { LL res_1 = -100,res_2 = -100; int xx[2] ={0},yy[2] = {0}; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i+j&1) { LL t = zs[j-i+n]+fs[i+j]-mp[i][j]; if(t>res_1) res_1 = t,xx[0] = i,yy[0] = j; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(!(i+j&1)) { LL t = zs[j-i+n]+fs[i+j]-mp[i][j]; if(t>res_2) res_2 = t,xx[1] = i,yy[1] = j; } printf("%lld\n%d %d %d %d\n",res_1+res_2,xx[0],yy[0],xx[1],yy[1]); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&mp[i][j]); init(); solve(); return 0; }