AtCoder 로그: 0077 - ABC 088 C

문제



문제문



$3\times 3$ 의 그리드가 있습니다. {i, j} $가 쓰여졌습니다. a_i + b_j $가 작성된 것 같습니다.

Takahashi의 정보가 올바른지 확인하십시오.

제약



· $c_{i,j}~(1\le i\le 3, 1\le j\le 3)$ 는 $0$ 이상 $100$ 이하의 정수

수록된 문제 세트



  • AtCoder에 등록하면 다음 작업 ( 제08문제제 )

  • 답변



    답변 1 (AC)



    할 수 있는 일이 많고, 반대로 무엇을 하면 좋을지 알기 어려운 문제입니다. 이 문제의 포인트는 변수 $a_1,a_2,a_3,b_1,b_2,b_3$ 의 값을 구할 수 없다는 것입니다. 6개의 변수의 합 $a_i+b_j$ 는 9 종류이므로, 개개의 변수의 값이 요구될 것 같습니다만, 이하의 고찰에 의해 무리인 것을 알 수 있습니다: 3개의 변수 $a_1, a_2,a_3$ 의 값은 무관하므로, 1열째에 줄지어 있는 3종류의 변수의 합 $a_1+b_1$, $a_2+b_1$, $a_3+b_1$ 의 값도 무관하다. 또한, 3개의 변수 $b_1, b_2, b_3$ 의 값은 무관하므로, 1행째에 줄지어 있는 3 종류의 변수의 합 $a_1+b_1$, $a_1+b_2$, $a_1+b_3$ 의 값 역시 무관하다. 따라서 5 종류의 변수의 합 $a_1+b_1$, $a_2+b_1$, $a_3+b_1$, $a_1+b_2$, $a_1+b_3$ 의 값은 무관하다. 반대로, 다른 네 가지 변수의 합 $a_2+b_2$, $a_3+b_2$, $a_2+b_3,a_3+b_3$ 는 다른 변수의 합과 관계가 있습니다. 의 합으로부터 계산할 수 있다. 예를 들어 $a_2+b_2=(a_1+b_2)+(a_2+b_1)-(a_1+b_1)$ 로 변형할 수 있으므로 변수의 합 $a_2+b_2$ 는 3 종류의 변수의 합 $a_1+b_2$, $a_2+b_1$, $a_1+b_1$ 에서 계산할 수 있습니다.

    코드를 작성할 때는, 1행째와 1열째의 5종류의 값이 올바르다고 가정해, 나머지의 4종류의 값이 철저히 되어 있는지를 확인하면 좋을 것입니다. 예를 들어 열별로 보면 각 열의 첫 번째 행과 두 번째 행의 차이는 항상 $S = a_2-a_1 $이고 두 번째 행과 세 번째 행의 차이는 항상 $ T = a_3-a_2 $입니다. 해야합니다. 따라서 특정 변수 값 $c_{i,j}$에 대해 첫 번째 열에서 $S,T$를 구하고 두 번째 열과 세 번째 열의 차이가 $S,T$인지 여부 체크하면 좋을 것입니다. 코드는 다음과 같습니다.



    abc088c-1.cpp
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
      vector<vector<int>> c(3, vector<int>(3));
      for ( int i=0; i<3; i++ ) {
        for ( int j=0; j<3; j++ ) {
          cin >> c.at(i).at(j);
        }
      }
    
      int s = c.at(1).at(0)-c.at(0).at(0);
      int t = c.at(2).at(0)-c.at(1).at(0);
      string answer = "Yes";
      if ( c.at(1).at(1)-c.at(0).at(1)!=s ) {
        answer = "No";
      } else if ( c.at(2).at(1)-c.at(1).at(1)!=t ) {
        answer = "No";
      } else if ( c.at(1).at(2)-c.at(0).at(2)!=s ) {
        answer = "No";
      } else if ( c.at(2).at(2)-c.at(1).at(2)!=t ) {
        answer = "No";
      }
    
      cout << answer << endl;
    }
    

    조사한 것



    AtCoder 해설 → 사용자 설명



    $a_1,a_2,a_3$ 를 루프로 변경해, 관계식으로부터 $b_1,b_2,b_3$ 를 구해, 나머지 관계식의 철쭉이 있는지를 체크하는 해법입니다.

    AtCoder 해설 → 콘테스트 전체 해설



    $a_1=0$ 로 두는 것으로 다른 변수의 값을 확정시켜, 나머지 관계식의 철쭉이 있는지를 체크하는 해법입니다.

    링크



    전후 기사


  • 이전 기사 → AtCoder 로그: 0076 - ABC 214에 가입했습니다.
  • 다음 기사 → AtCoder 로그: 0078 - ABC 214 A
  • 좋은 웹페이지 즐겨찾기