Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <algorithm>
- #include <utility>
- #include <vector>
- using namespace std;
- vector<string> field(10);
- char vert(){
- long long i, j, xmx, xcur, zeromx, zerocur;
- for(i=0; i<10; ++i){
- xmx=0;
- xcur=0;
- zeromx=0;
- zerocur=0;
- for(j=0; j<10; ++j) switch(field[j][i]){
- case '.':
- xmx=max(xmx, xcur);
- xcur=0;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case 'X':
- ++xcur;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case '0':
- ++zerocur;
- xmx=max(xmx, xcur);
- xcur=0;
- break;
- }
- zeromx=max(zeromx, zerocur);
- xmx=max(xmx, xcur);
- if(zeromx>=5) return '0';
- if(xmx>=5) return 'X';
- }
- return 'N';
- }
- char hor(){
- long long i, j, xmx, xcur, zeromx, zerocur;
- for(i=0; i<10; ++i){
- xmx=0;
- xcur=0;
- zeromx=0;
- zerocur=0;
- for(j=0; j<10; ++j) switch(field[i][j]){
- case '.':
- xmx=max(xmx, xcur);
- xcur=0;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case 'X':
- ++xcur;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case '0':
- ++zerocur;
- xmx=max(xmx, xcur);
- xcur=0;
- break;
- }
- zeromx=max(zeromx, zerocur);
- xmx=max(xmx, xcur);
- if(zeromx>=5) return '0';
- if(xmx>=5) return 'X';
- }
- return 'N';
- }
- char north_west(){
- long long i, j, xmx, xcur, zeromx, zerocur;
- for(i=4; i<10; ++i){
- xmx=0;
- xcur=0;
- zeromx=0;
- zerocur=0;
- for(j=i; j>=0; --j) switch(field[j][i-j]){
- case '.':
- xmx=max(xmx, xcur);
- xcur=0;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case 'X':
- ++xcur;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case '0':
- ++zerocur;
- xmx=max(xmx, xcur);
- xcur=0;
- break;
- }
- zeromx=max(zeromx, zerocur);
- xmx=max(xmx, xcur);
- if(zeromx>=5) return '0';
- if(xmx>=5) return 'X';
- }
- for(i=1; i<=5; ++i){
- xmx=0;
- xcur=0;
- zeromx=0;
- zerocur=0;
- for(j=i; j<10; ++j) switch(field[9-j+i][j]){
- case '.':
- xmx=max(xmx, xcur);
- xcur=0;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case 'X':
- ++xcur;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case '0':
- ++zerocur;
- xmx=max(xmx, xcur);
- xcur=0;
- break;
- }
- zeromx=max(zeromx, zerocur);
- xmx=max(xmx, xcur);
- if(zeromx>=5) return '0';
- if(xmx>=5) return 'X';
- }
- return 'N';
- }
- char north_east(){
- long long i, j, xmx, xcur, zeromx, zerocur;
- for(i=5; i>=0; --i){
- xmx=0;
- xcur=0;
- zeromx=0;
- zerocur=0;
- for(j=i; j<10; ++j) switch(field[j][j-i]){
- case '.':
- xmx=max(xmx, xcur);
- xcur=0;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case 'X':
- ++xcur;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case '0':
- ++zerocur;
- xmx=max(xmx, xcur);
- xcur=0;
- break;
- }
- zeromx=max(zeromx, zerocur);
- xmx=max(xmx, xcur);
- if(zeromx>=5) return '0';
- if(xmx>=5) return 'X';
- }
- for(i=1; i<=5; ++i){
- xmx=0;
- xcur=0;
- zeromx=0;
- zerocur=0;
- for(j=i; j<10; ++j) switch(field[j-i][j]){
- case '.':
- xmx=max(xmx, xcur);
- xcur=0;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case 'X':
- ++xcur;
- zeromx=max(zeromx, zerocur);
- zerocur=0;
- break;
- case '0':
- ++zerocur;
- xmx=max(xmx, xcur);
- xcur=0;
- break;
- }
- zeromx=max(zeromx, zerocur);
- xmx=max(xmx, xcur);
- if(zeromx>=5) return '0';
- if(xmx>=5) return 'X';
- }
- return 'N';
- }
- char solution(){
- pair<long long, long long> i, j, k, u, g, h;
- bool all=true;
- 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]=='.'){
- all=true;
- field[i.first][i.second]='X';
- field[j.first][j.second]='X';
- field[u.first][u.second]='X';
- 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[g.first][g.second]='0';
- field[h.first][h.second]='0';
- if(north_east()=='X'||north_west()=='X'||hor()=='X'||vert()=='X'){
- all=false;
- break;
- }
- }
- if(all) return 'X';
- }
- 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]=='.'){
- all=true;
- field[i.first][i.second]='0';
- field[j.first][j.second]='0';
- field[u.first][u.second]='0';
- 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)){
- field[g.first][g.second]='X';
- field[h.first][h.second]='X';
- field[k.first][k.second]='X';
- if(north_east()=='0'||north_west()=='0'||hor()=='0'||vert()=='0'){
- all=false;
- break;
- }
- }
- if(all) return '0';
- }
- return 'N';
- }
- int main(){
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- long long j, i, n; cin >> n;
- for(i=0; i<n; ++i){
- field=vector<string>(10);
- for(j=0; j<10; ++j) cin >> field[j];
- cout << solution() << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement