PKU 2941 Homogeneous Squares

http://poj.org/problem?id=2941

n*nの正方行列が与えられる。
この中から行、列のかぶらないn個の要素を取ってきた時、
どのようにとってきても和が同じ値になる行列かどうかを判定しろというような問題

ひさしぶりすぎるPKU
2つの行A,Bについて、条件を満たすならば
Ai-Aj=Bi-Bjが常に成り立つような気がしたので、それを確かめた。

入力にiostream使うと、間に合わないようです。

int n;
int in[1000];
int in2[1000];

void solve(){
  rep(i,n) scanf("%d",in+i);
  bool ok = true;
  rep(i,n-1){
    rep(j,n) scanf("%d",in2+j);
    rep(j,n-1) ok &= in[j]-in[0] == in2[j]-in2[0];
  }
  cout << (ok?"homogeneous":"not homogeneous") << endl;
}


main(){
  while(scanf("%d",&n),n) solve();
}