草体にぼ日記

だらだらと

ABC088C Takahashi`s information

ABC088C Takahashi`s information

提出AC

もう一個

提出AC2

int main()
{
    cout <<setprecision(10);
    int c[3][3];
    rep(i,3){
        rep(j,3){
            cin >>c[i][j];
        }
    }
    rep(i,2){
        rep(j,2){
            if(c[i][j] - c[i+1][j] != c[i][j+1] - c[i+1][j+1]){
                cout << "No" << endl;
                return 0;
            }
        }
    }
    rep(j,2){
        rep(i,2){
            if(c[i][j] - c[i+1][j] != c[i][j+1] - c[i+1][j+1]){
                cout << "No" << endl;
                return 0;
            }
        }
    }
    coY();
 
 
}

解法

画像をご覧くださいf:id:niboshi_bisyoujo:20191119180214j:plain

  1. a1 + b1 = c1,1

  2. a1 + b2 = c1,2

  3. a1 + b3 = c1.3

  4. a2 + b1 = c2,1

  5. a2 + b2 = c2,2

  6. a2 + b3 = c2,3

  7. a3 + b1 = c3,1

  8. a3 + b2 = c3,2

  9. a3 + b3 = c3,3

ですね(そうですね)

1 - 2 = b1 - b2 = c1,1 - c1,2

4 - 5 = b1 - b2 = c2,1 - c2,2

みたいな感じなので

c1,1 - c1,2 = c2,1 - c2,2

で一致しなきゃいけなっていうのは分かるんですけど、

どこまでが一致してればいいか分からないですね

例えばさっき貼ったコードは

↓ ↓ ↓

↓ ↓ ↓

って感じで一致しているか見て

そのあと

→→

→→

→→

って感じで見るってやってたんですけど

提出2のコード

int main()
{
    cout <<setprecision(10);
    int c[3][3];
    rep(i,3){
        rep(j,3){
            cin >>c[i][j];
        }
    }
    rep(i,2){
        rep(j,2){
            if(c[i][j] - c[i+1][j] != c[i][j+1] - c[i+1][j+1]){
                cout << "No" << endl;
                return 0;
            }
        }
    }
    coY();
}

こっちは

↓↓↓

↓↓↓

って感じでやってます。これでもACみたいなんですよね。

どうやったらいいのか証明ほしいですね(解説読んでないのであとで読みます)

後日談 (解説動画を見た) なるほどa1を決めたら他の a1,a2,a3 b1 b2 b3 が全部決まるから、決めたときに条件通りになっているかを見ればいいのか うむ