Advertisement
simushin_pavel

Untitled

Nov 23rd, 2020
696
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.58 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <utility>
  5. #include <vector>
  6. using namespace std;
  7. vector<string> field(10);
  8. char vert(){
  9.     long long i, j, xmx, xcur, zeromx, zerocur;
  10.     for(i=0; i<10; ++i){
  11.         xmx=0;
  12.         xcur=0;
  13.         zeromx=0;
  14.         zerocur=0;
  15.         for(j=0; j<10; ++j) switch(field[j][i]){
  16.             case '.':
  17.             xmx=max(xmx, xcur);
  18.             xcur=0;
  19.             zeromx=max(zeromx, zerocur);
  20.             zerocur=0;
  21.             break;
  22.             case 'X':
  23.             ++xcur;
  24.             zeromx=max(zeromx, zerocur);
  25.             zerocur=0;
  26.             break;
  27.             case '0':
  28.             ++zerocur;
  29.             xmx=max(xmx, xcur);
  30.             xcur=0;
  31.             break;
  32.         }
  33.         zeromx=max(zeromx, zerocur);
  34.         xmx=max(xmx, xcur);
  35.         if(zeromx>=5) return '0';
  36.         if(xmx>=5) return 'X';
  37.     }
  38.     return 'N';
  39. }
  40. char hor(){
  41.     long long i, j, xmx, xcur, zeromx, zerocur;
  42.     for(i=0; i<10; ++i){
  43.         xmx=0;
  44.         xcur=0;
  45.         zeromx=0;
  46.         zerocur=0;
  47.         for(j=0; j<10; ++j) switch(field[i][j]){
  48.             case '.':
  49.             xmx=max(xmx, xcur);
  50.             xcur=0;
  51.             zeromx=max(zeromx, zerocur);
  52.             zerocur=0;
  53.             break;
  54.             case 'X':
  55.             ++xcur;
  56.             zeromx=max(zeromx, zerocur);
  57.             zerocur=0;
  58.             break;
  59.             case '0':
  60.             ++zerocur;
  61.             xmx=max(xmx, xcur);
  62.             xcur=0;
  63.             break;
  64.         }
  65.         zeromx=max(zeromx, zerocur);
  66.         xmx=max(xmx, xcur);
  67.         if(zeromx>=5) return '0';
  68.         if(xmx>=5) return 'X';
  69.     }
  70.     return 'N';
  71. }
  72. char north_west(){
  73.     long long i, j, xmx, xcur, zeromx, zerocur;
  74.     for(i=4; i<10; ++i){
  75.         xmx=0;
  76.         xcur=0;
  77.         zeromx=0;
  78.         zerocur=0;
  79.         for(j=i; j>=0; --j) switch(field[j][i-j]){
  80.             case '.':
  81.             xmx=max(xmx, xcur);
  82.             xcur=0;
  83.             zeromx=max(zeromx, zerocur);
  84.             zerocur=0;
  85.             break;
  86.             case 'X':
  87.             ++xcur;
  88.             zeromx=max(zeromx, zerocur);
  89.             zerocur=0;
  90.             break;
  91.             case '0':
  92.             ++zerocur;
  93.             xmx=max(xmx, xcur);
  94.             xcur=0;
  95.             break;
  96.         }
  97.         zeromx=max(zeromx, zerocur);
  98.         xmx=max(xmx, xcur);
  99.         if(zeromx>=5) return '0';
  100.         if(xmx>=5) return 'X';
  101.     }
  102.     for(i=1; i<=5; ++i){
  103.         xmx=0;
  104.         xcur=0;
  105.         zeromx=0;
  106.         zerocur=0;
  107.         for(j=i; j<10; ++j) switch(field[9-j+i][j]){
  108.             case '.':
  109.             xmx=max(xmx, xcur);
  110.             xcur=0;
  111.             zeromx=max(zeromx, zerocur);
  112.             zerocur=0;
  113.             break;
  114.             case 'X':
  115.             ++xcur;
  116.             zeromx=max(zeromx, zerocur);
  117.             zerocur=0;
  118.             break;
  119.             case '0':
  120.             ++zerocur;
  121.             xmx=max(xmx, xcur);
  122.             xcur=0;
  123.             break;
  124.         }
  125.         zeromx=max(zeromx, zerocur);
  126.         xmx=max(xmx, xcur);
  127.         if(zeromx>=5) return '0';
  128.         if(xmx>=5) return 'X';
  129.     }
  130.     return 'N';
  131. }
  132. char north_east(){
  133.     long long i, j, xmx, xcur, zeromx, zerocur;
  134.     for(i=5; i>=0; --i){
  135.         xmx=0;
  136.         xcur=0;
  137.         zeromx=0;
  138.         zerocur=0;
  139.         for(j=i; j<10; ++j) switch(field[j][j-i]){
  140.             case '.':
  141.             xmx=max(xmx, xcur);
  142.             xcur=0;
  143.             zeromx=max(zeromx, zerocur);
  144.             zerocur=0;
  145.             break;
  146.             case 'X':
  147.             ++xcur;
  148.             zeromx=max(zeromx, zerocur);
  149.             zerocur=0;
  150.             break;
  151.             case '0':
  152.             ++zerocur;
  153.             xmx=max(xmx, xcur);
  154.             xcur=0;
  155.             break;
  156.         }
  157.         zeromx=max(zeromx, zerocur);
  158.         xmx=max(xmx, xcur);
  159.         if(zeromx>=5) return '0';
  160.         if(xmx>=5) return 'X';
  161.     }
  162.     for(i=1; i<=5; ++i){
  163.         xmx=0;
  164.         xcur=0;
  165.         zeromx=0;
  166.         zerocur=0;
  167.         for(j=i; j<10; ++j) switch(field[j-i][j]){
  168.             case '.':
  169.             xmx=max(xmx, xcur);
  170.             xcur=0;
  171.             zeromx=max(zeromx, zerocur);
  172.             zerocur=0;
  173.             break;
  174.             case 'X':
  175.             ++xcur;
  176.             zeromx=max(zeromx, zerocur);
  177.             zerocur=0;
  178.             break;
  179.             case '0':
  180.             ++zerocur;
  181.             xmx=max(xmx, xcur);
  182.             xcur=0;
  183.             break;
  184.         }
  185.         zeromx=max(zeromx, zerocur);
  186.         xmx=max(xmx, xcur);
  187.         if(zeromx>=5) return '0';
  188.         if(xmx>=5) return 'X';
  189.     }
  190.     return 'N';
  191. }
  192. char solution(){
  193.     pair<long long, long long> i, j, k, u, g, h;
  194.     bool all=true;
  195.     for(i.first=0; i.first<10; ++i.first) for(i.second=0; i.second<10; ++i.second) for(j.first=0; j.first<10; ++j.first) for(j.second=0; j.second<10; ++j.second) for(u.first=0; u.first<10; ++u.first) for(u.second=0; u.second<10; ++u.second) if((i.first!=j.first||i.second!=j.second)&&(i.first!=u.first||i.second!=u.second)&&(j.first!=u.first||j.second!=u.second)&&field[i.first][i.second]=='.'&&field[j.first][j.second]=='.'&&field[u.first][u.second]=='.'){
  196.         all=true;
  197.         field[i.first][i.second]='X';
  198.         field[j.first][j.second]='X';
  199.         field[u.first][u.second]='X';
  200.         for(g.first=0; g.first<10; ++g.first) for(g.second; g.second<10; ++g.second) for(h.first=0; h.first<10; ++h.first) for(h.second=0; h.second<10; ++h.second) if((i.first!=g.first||i.second!=g.second)&&(i.first!=h.first||i.second!=h.second)&&(j.first!=g.first||j.second!=g.second)&&(j.first!=h.first||j.second!=h.second)&&(u.first!=g.first||u.second!=g.second)&&(u.first!=h.first||u.second!=h.second)&&(h.first!=g.first||h.second!=g.second)&&field[g.first][g.second]=='.'&&field[h.first][h.second]=='.'){
  201.             field[g.first][g.second]='0';
  202.             field[h.first][h.second]='0';
  203.             if(north_east()=='X'||north_west()=='X'||hor()=='X'||vert()=='X'){
  204.                 all=false;
  205.                 break;
  206.             }
  207.         }
  208.         if(all) return 'X';
  209.     }
  210.     for(i.first=0; i.first<10; ++i.first) for(i.second=0; i.second<10; ++i.second) for(j.first=0; j.first<10; ++j.first) for(j.second=0; j.second<10; ++j.second) for(u.first=0; u.first<10; ++u.first) for(u.second=0; u.second<10; ++u.second) if((i.first!=j.first||i.second!=j.second)&&(i.first!=u.first||i.second!=u.second)&&(j.first!=u.first||j.second!=u.second)&&field[i.first][i.second]=='.'&&field[j.first][j.second]=='.'&&field[u.first][u.second]=='.'){
  211.         all=true;
  212.         field[i.first][i.second]='0';
  213.         field[j.first][j.second]='0';
  214.         field[u.first][u.second]='0';
  215.         for(k.first=0; k.first<10; ++k.first) for(k.second=0; k.second<10; ++k.second) for(g.first=0; g.first<10; ++g.first) for(g.second; g.second<10; ++g.second) for(h.first=0; h.first<10; ++h.first) for(h.second=0; h.second<10; ++h.second) if((i.first!=g.first||i.second!=g.second)&&(i.first!=h.first||i.second!=h.second)&&(j.first!=g.first||j.second!=g.second)&&(j.first!=h.first||j.second!=h.second)&&(u.first!=g.first||u.second!=g.second)&&(u.first!=h.first||u.second!=h.second)&&(h.first!=g.first||h.second!=g.second)&&field[g.first][g.second]=='.'&&field[h.first][h.second]=='.'&&field[k.first][k.second]=='.'&&(k.first!=i.first||k.second!=i.second)&&(k.first!=j.first||k.second!=j.second)&&(k.first!=u.first||k.second!=u.second)&&(k.first!=g.first||k.second!=g.second)&&(k.first!=h.first||k.second!=h.second)){
  216.             field[g.first][g.second]='X';
  217.             field[h.first][h.second]='X';
  218.             field[k.first][k.second]='X';
  219.             if(north_east()=='0'||north_west()=='0'||hor()=='0'||vert()=='0'){
  220.                 all=false;
  221.                 break;
  222.             }
  223.         }
  224.         if(all) return '0';
  225.     }
  226.     return 'N';
  227. }
  228. int main(){
  229.     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  230.     long long j, i, n; cin >> n;
  231.     for(i=0; i<n; ++i){
  232.         field=vector<string>(10);
  233.         for(j=0; j<10; ++j) cin >> field[j];
  234.         cout << solution() << "\n";
  235.     }
  236.     return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement