题解:P16849 [GKS 2021 #D] Arithmetic Square
gao2011
·
·
题解
题目链接
题目描述
本题就是一个正方形共 8 组数缺少中间的值,本值取任意整数。
判断是否为等差数列可以用等差中项法为 $2b=a+c$。然后本题就可用暴力过了。
### 代码
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T;
int g[3][3];
inline bool IFF(int x,int y,int z){//判断是否为等差数列
return y*2==x+z;//等差中项法a+c=2*b
}
inline int DD(int mid){
int cnt = 0;
g[1][1]=mid;
// 三行
cnt += IFF(g[0][0], g[0][1], g[0][2]);
cnt += IFF(g[1][0], g[1][1], g[1][2]);
cnt += IFF(g[2][0], g[2][1], g[2][2]);
// 三列
cnt += IFF(g[0][0], g[1][0], g[2][0]);
cnt += IFF(g[0][1], g[1][1], g[2][1]);
cnt += IFF(g[0][2], g[1][2], g[2][2]);
// 两条对角线
cnt += IFF(g[0][0], g[1][1], g[2][2]);
cnt += IFF(g[0][2], g[1][1], g[2][0]);
return cnt;
}
int sj=0;
signed main(){
cin>>T;
while(T--){
sj++;
memset(g,0,sizeof g);//不要忘记初始化
g[1][1]=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];
int MAX=INT_MIN;
//取中间值,反向运用 等差中项法b=(a+c)/2
MAX=max(MAX,DD((g[1][0]+g[1][2])/2));
MAX=max(MAX,DD((g[0][1]+g[2][1])/2));
MAX=max(MAX,DD((g[0][0]+g[2][2])/2));
MAX=max(MAX,DD((g[0][2]+g[2][0])/2));
cout<<"Case #"<<sj<<": "<<MAX<<endl;
}
return 0;
}
```