Advertisement
nicuvlad76

Untitled

Mar 4th, 2023
674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.87 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("convex.in");
  6. ofstream fout("convex.out");
  7.  
  8. char a[705][705],a2[705][705];
  9. int margi[5001],margj[5001];
  10.  
  11. void Bordare(int n,int m){
  12.     int i,j;
  13.     for(i=0;i<=n+1;++i) a[i][0]=a[i][m+1]='A';
  14.     for(j=0;j<=m+1;++j) a[0][j]=a[n+1][j]='A';
  15. }
  16.  
  17. bool VerifCol(int n,int col){
  18.     int i,k=0;
  19.     for(i=1;i<=n;++i) if(a[i][col]=='N') ++k;
  20.     if(k>1) return 1;
  21.     return 0;
  22. }
  23.  
  24. bool VerifLin(int lin,int m){
  25.     int j,k=0;
  26.     for(j=1;j<=m;++j) if(a[lin][j]=='N') ++k;
  27.     if(k>1) return 1;
  28.     return 0;
  29. }
  30.  
  31. int main()
  32. {
  33.     int n,m,i,j,k,prov=0;
  34.     fin>>n>>m;
  35.     Bordare(n,m);
  36.     for(i=1;i<=n;++i)
  37.         for(j=1;j<=m;++j)
  38.             {fin>>a[i][j];a2[i][j]=a[i][j];}
  39.    
  40.     int ijos=0,jstanga=0,isus=0,jdreapta=0;
  41.     for(j=1;j<=m && ijos==0;++j){
  42.         for(i=n;i>=1;--i) if(a[i][j]=='N') {ijos=i;jstanga=j;break;}
  43.     }
  44.     for(j=m;j>=1 && isus==0;--j){
  45.         for(i=1;i<=n;++i) if(a[i][j]=='N') {isus=i;jdreapta=j;break;}
  46.     }
  47.     if(a[ijos][jdreapta]=='A' && a[isus][jstanga]=='A') {fout<<0;return 0;}
  48.     int jjos=0,istanga=0,jsus=0,idreapta=0;
  49.     for(i=n;i>=1 && jjos==0;--i){
  50.         for(j=n;j>=1;--j) if(a[i][j]=='N') {istanga=i;jjos=j;break;}
  51.     }
  52.     for(i=1;i<=n && jsus==0;++i){
  53.         for(j=1;j<=n;++j) if(a[i][j]=='N') {idreapta=i;jsus=j;break;}
  54.     }
  55.     if(a[istanga][jsus]=='A' && a[idreapta][jjos]=='A') {fout<<0;return 0;}
  56.     for(i=1;i<=n;++i){
  57.         for(j=1;j<=m;++j){
  58.             if(a[i][j]=='N'){
  59.                 k=0;
  60.                 if(a[i-1][j]=='N') ++k;
  61.                 if(a[i+1][j]=='N') ++k;
  62.                 if(a[i][j-1]=='N') ++k;
  63.                 if(a[i][j+1]=='N') ++k;
  64.                 if(k==1){
  65.                     if(a[i-1][j]=='N' || a[i+1][j]=='N'){
  66.                         if(VerifLin(i,m)==1) {fout<<0;return 0;}
  67.                         else{
  68.                             a[i][j]='A';
  69.                             if(a[i-1][j]=='N') {--i;--j;}
  70.                         }
  71.                     }
  72.                     else if(a[i][j-1]=='N' || a[i][j+1]=='N'){
  73.                         if(VerifCol(n,j)==1) {fout<<0;return 0;}
  74.                         else{
  75.                             a[i][j]='A';
  76.                             if(a[i][j-1]=='N') {j-=2;}
  77.                         }
  78.                     }
  79.                 }
  80.             }
  81.         }
  82.     }
  83.     int x=1;
  84.     for(i=1;i<=n;++i){
  85.         for(j=1;j<=n;++j){
  86.             if(a[i][j]=='N'){
  87.                 if(a[i-1][j]=='A' ||
  88.                    a[i+1][j]=='A' ||
  89.                    a[i][j-1]=='A' ||
  90.                    a[i][j+1]=='A') {margi[x]=i;margj[x]=j;++x;}
  91.             }
  92.         }
  93.     }
  94.     for(i=1;i<x;++i){
  95.         for(j=i+1;j<x;++j){
  96.             if(a[margi[i]][margj[j]]=='A' && a[margi[j]][margj[i]]=='A') {fout<<0;return 0;}
  97.         }
  98.     }
  99.     fout<<1;
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement