v 0. Pasted by slipstak2 as cpp at 2011-11-01 07:52:49 MSK and set expiration to never.

Paste will expire never.

  1. // Очно-заочный кружок
  2. // Занятие №9. Дополнительные олимпиадные задачи
  3. // Задача A. Проверьте правильность ситуации
  4. // ibelyaev: 31Oct2011
  5. // http://cppalgo.blogspot.com/2011/04/blog-post.html
  6.  
  7. #include <iostream>
  8. #include <cstdio>
  9. #include <algorithm>
  10. #include <string>
  11. #include <string.h>
  12. #include <cmath>
  13. #include <queue>
  14. #include <vector>
  15. #include <map>
  16. #include <stdlib.h> // for exit(0)
  17. #include <stack>
  18. #include <list>
  19. #include <ctime>
  20. #include <set>
  21.  
  22. using namespace std;
  23.  
  24. int n;
  25. int mas[3][3];
  26. int one, two;
  27. void input(){
  28.     for (int i=0;i<3;++i)
  29.         for (int j=0;j<3;++j) {
  30.             scanf("%d", &mas[i][j]);
  31.             if (mas[i][j] == 1) one++;
  32.             if (mas[i][j] == 2) two++;
  33.         }
  34. }
  35. bool check_amount() {
  36.     return one == two || one == two + 1;
  37. }
  38. int calc_ver(int val) {
  39.     int amount = 0;
  40.     for (int j=0;j<3;++j) {
  41.         bool isOK = true;
  42.         for (int i=0;i<3;++i)
  43.             isOK &= mas[i][j] == val;
  44.         amount += isOK ? 1 : 0;
  45.     }
  46.     return amount;
  47. }
  48. int calc_gor(int val) {
  49.     int amount = 0;
  50.     for (int i=0;i<3;++i) {
  51.         bool isOK = true;
  52.         for (int j=0;j<3;++j)
  53.             isOK &= mas[i][j] == val;
  54.         amount += isOK ? 1 : 0;
  55.     }
  56.     return amount;
  57. }
  58. int calc_dia(int val) {
  59.     int amount = 0;
  60.     amount += (mas[0][0] == mas[1][1] && mas[1][1] == mas[2][2] && mas[2][2] == val) ? 1 : 0;
  61.     amount += (mas[2][0] == mas[1][1] && mas[1][1] == mas[0][2] && mas[0][2] == val) ? 1 : 0;
  62.     return amount;
  63. }
  64. bool check_lines() {
  65.     int ONE = calc_ver(1) + calc_gor(1) + calc_dia(1);
  66.     int TWO = calc_ver(2) + calc_gor(2) + calc_dia(2);
  67.     return
  68.         (one == two && !ONE && TWO <= 1) ||
  69.         (one == two + 1 && !TWO && ONE <= 1)  ||
  70.         (one == 5 && two == 4);
  71. }
  72. void solve(){
  73.     bool isOK = true;
  74.     isOK &= check_amount();
  75.     isOK &= check_lines();
  76.     if (isOK)
  77.         printf("YES");
  78.     else
  79.         printf("NO");
  80. }
  81. int main()
  82. {
  83.     freopen("input.txt","r",stdin);
  84.     freopen("output.txt","w",stdout);
  85.  
  86.     input();
  87.     solve();
  88.  
  89.     return 0;
  90. }


Editing is locked.