제출 #779151

#제출 시각아이디문제언어결과실행 시간메모리
7791511075508020060209tcSajam (COCI18_sajam)C++14
90 / 90
3574 ms8180 KiB
#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define X first
#define Y second

int n;int K;
int gr[1010][1010];
int ogr[1010][1010];
int rcal(int r){
int cnt=0;
for(int i=1;i<=n;i++){
    cnt+=gr[r][i];
}
return min(cnt,n-cnt);
}

void solve(int rw){
for(int i=1;i<=n;i++){
    if(gr[rw][i]==0){
        for(int j=1;j<=n;j++){
            gr[j][i]^=1;
        }
    }
}
int cal=0;
for(int i=1;i<=n;i++){
    cal+=rcal(i);
}
if(cal<=K){
    cout<<"DA\n";exit(0);
}
}

void rst(){
for(int i=1;i<=n;i++){
    for(int j=1;j<=n;j++){
        gr[i][j]=ogr[i][j];
    }
}
}

signed main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
cin>>n>>K;
for(int i=1;i<=n;i++){
    string s;
    cin>>s;
    s="*"+s;
    for(int j=1;j<=n;j++){
        if(s[j]=='o'){
            gr[i][j]=0;
        }else{
            gr[i][j]=1;
        }
        ogr[i][j]=gr[i][j];
    }
}


for(int i=1;i<=n;i++){
    rst();
    solve(i);
    rst();
    for(int j=1;j<=n;j++){
        gr[i][j]^=1;
    }
    solve(i);
}

if(K==n){
    for(int clm=1;clm<=n;clm++){
        rst();
        for(int i=1;i<=n;i++){
            if(i==clm){
                if(gr[1][i]==1){
                    for(int j=1;j<=n;j++){
                        gr[j][i]^=1;
                    }
                }
            }else{
                if(gr[1][i]==0){
                    for(int j=1;j<=n;j++){
                        gr[j][i]^=1;
                    }
                }
            }
        }
        int ok=1;
        for(int i=1;i<=n;i++){
            if(rcal(i)>=2){ok=0;}
        }
        if(ok){
            cout<<"DA\n";return 0;
        }
    }
    for(int i=1;i<=n;i++){
        ogr[1][i]^=1;
    }
    for(int clm=1;clm<=n;clm++){
        rst();
        for(int i=1;i<=n;i++){
            if(i==clm){
                if(gr[1][i]==1){
                    for(int j=1;j<=n;j++){
                        gr[j][i]^=1;
                    }
                }
            }else{
                if(gr[1][i]==0){
                    for(int j=1;j<=n;j++){
                        gr[j][i]^=1;
                    }
                }
            }
        }
        int ok=1;
        for(int i=1;i<=n;i++){
            if(rcal(i)>=2){ok=0;}
        }
        if(ok){
            cout<<"DA\n";return 0;
        }
    }
}


cout<<"NE\n";





}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...