首页 > 其他分享 >CF463C 题解

CF463C 题解

时间:2022-10-17 14:34:09浏览次数:88  
标签:p2 p1 int 题解 CF463C getchar buf define

题目传送门

题目分析

贪心练手好题。

首先,国际象棋中象的走法是斜着走,也就是这样:

通过上面的图我们不难看出,如果一个象在黑格,另外一个在白格,那么它们之间一定不会互相攻击到。

我们通过染色来确定格子的黑白颜色,一种判定方式是横纵坐标相加,偶数为黑,奇数为白。

然后我们贪心的找出最大收益,即分别找出放在黑格子与白格子的收益,然后两边各取最大值相加即可。

贴上代码

#include<bits/stdc++.h>
#define lf i+j
#define rt i-j+2500
#define int long long
using namespace std;
static char buf[1000000],*p1=buf,*p2=buf;
#define getchar() p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++
inline int read(){int x=0,f=1;char c=getchar();while(c<'0' || c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0' && c<='9') {x=x*10+c-48;c=getchar();}return x*f;}
const int maxn=5002;
int n;
int tot1,tot2;
int x,y,xx,yy;
int a[maxn][maxn];
int p[maxn],q[maxn];
inline void init(){
	n=read();
	for(register int i=1;i<=n;++i){
		for(register int j=1;j<=n;++j) a[i][j]=read();
	}
	for(register int i=1;i<=n;++i){
		for(register int j=1;j<=n;++j){
			p[lf]+=a[i][j];q[rt]+=a[i][j];
		}
	}
}
inline void print(){
	cout<<tot1+tot2<<endl;
	cout<<x<<" "<<y<<" "<<xx<<" "<<yy<<" ";
}
signed main(){
	init();
	for(register int i=1;i<=n;++i){
		for(register int j=1;j<=n;++j){
			if((i+j)%2==1){
				if(tot1<=p[lf]+q[rt]-a[i][j]){
					tot1=p[lf]+q[rt]-a[i][j];
					x=i;y=j;
				}
			}
			else if(tot2<=p[lf]+q[rt]-a[i][j]){
				tot2=p[lf]+q[rt]-a[i][j];
				xx=i;yy=j;
			}
		}
	}
	print();
}

标签:p2,p1,int,题解,CF463C,getchar,buf,define
From: https://www.cnblogs.com/yizhixiaoyun/p/16799109.html

相关文章

  • P3755 题解
    前言题目传送门!更好的阅读体验?为啥要用分块呀,cdq分治真好写!前置知识:三维偏序模版。思路记\(s_{i,j}\)表示:对角坐标为\((-\infty,-\infty)\)到\((i,j)\)的......
  • CF525E 题解
    前言题目传送门!更好的阅读体验?比较套路的折半搜索。代码实现略微繁琐。思路每个数有三个状态:不选、选\(a_i\)、选\(a_i!\)。数据范围\(n\le26\),暗示着爆搜,但是......
  • CF960E Alternating Tree题解:
    CF960EAlternatingTree题解:也许是第一道自己做的*2300。可简化为树上黑白染色。首先想到树形DP,如果是棵有根树,状态转移方程如下:\[{f[x][0]=f[y][1]+siz[y]*a[x]}\]......
  • P3959 [NOIP2017 提高组] 宝藏 题解
    一道不错的状压dp题。注意到本质上打通的路径会构成一棵树,因此实际上总花费就是一个点的层高(根节点层高为0)乘上其到父亲节点的边的边权。据此可以考虑一种初步的状压......
  • java问题解答
    因为子类继承自父类,会沿用父类的东西(没被覆盖的函数以及可见的成员变量等),而这些东西子类是没有的,需要先初始化父类才能被使用子类构造方法中调用父类构造方法,一个作用是......
  • 2021 CCPC 威海站 VP记录(题解)
    2021CCPC威海站VP记录(题解)题目顺序为vp时开题顺序:A-Goodbye,Ziyin!签到,连边数小于等于2的可以作为二叉树根,若有大于4的直接输出0。code:voidsolve(){ int......
  • [题解] Codeforces Global Round 23 1746 A B C D E1 F 题解
    点我看题求点赞A.Maxmina首先序列全0的情况肯定是NO。否则,如果\(k\ge3\),则在序列中随便找一个1,把他左边和右边分别用第一种操作不断缩,直到序列长度为k为止,最后用一次2......
  • CF1153F 题解
    传送门题意有一段长为\(l\)的线段,有\(n\)个区间,左右端点在\([0,l)\)间均匀随机(可能不是整数)。求期望被至少\(k\)段区间覆盖的长度,对\(998244353\)取膜模。题......
  • Codeforces Global Round 23题解
    T1link大水题,不想说最后一定可以把一个序列消成长度为\(k\)的带一序列,前提是其原来就有一所以贪心就是如果有一,就行,反之不行codeT2linkwssb,考试的时候居然想了大......
  • Codeforces Global Round 23 (A-E1)个人题解
    A-Maxmina给定一个01串,我们可以将k个数变为他们的最大值(k个数变成1个数),或者将相邻的两个数变为他们的最小值(2个数变成1个数),询问是否可以将这个01串变成仅含有一个1的......