题解:P16849 [GKS 2021 #D] Arithmetic Square
zhouhuan2013 · · 题解
题目传送门
一道非常基础的数学题。
我们可以发现,只有这个
观察网格可以发现,只有中间行,中间列,从左上到右下的对角线和从右上到左下的对角线这
代码如下。
#include<bits/stdc++.h>
using namespace std;
bool check(int x,int y,int z){
return 2*y==x+z;//判断是否为等差数列
}
int main(){
int T;
cin>>T;
for(int i=1;i<=T;i++){
int g[3][3],p[5],ans=0;
cin>>g[0][0]>>g[0][1]>>g[0][2];
cin>>g[1][0]>>g[1][2];
cin>>g[2][0]>>g[2][1]>>g[2][2];
p[1]=g[1][0]+g[1][2];
p[2]=g[0][1]+g[2][1];
p[3]=g[0][0]+g[2][2];
p[4]=g[0][2]+g[2][0];
for(int j=1;j<=4;j++){//枚举
int mid=p[j]/2,cnt=0;
if(check(g[0][0],g[0][1],g[0][2]))
cnt++;
if(check(g[1][0],mid,g[1][2]))
cnt++;
if(check(g[2][0],g[2][1],g[2][2]))
cnt++;
if(check(g[0][0],g[1][0],g[2][0]))
cnt++;
if(check(g[0][1],mid,g[2][1]))
cnt++;
if(check(g[0][2],g[1][2],g[2][2]))
cnt++;
if(check(g[0][0],mid,g[2][2]))
cnt++;
if(check(g[0][2],mid,g[2][0]))
cnt++;
ans=max(ans,cnt);
}
cout<<"Case #"<<i<<": "<<ans<<'\n';
}
return 0;
}