题解:P16849 [GKS 2021 #D] Arithmetic Square

· · 题解

题目链接

题目描述

本题就是一个正方形共 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; } ```