usaco 2017 bronze contest modern art problem

Revision en1, by Ahmet_Efendi, 2025-07-09 10:22:06

include<bits/stdc++.h>

using namespace std; setres;

void trypermut(vectorv,vector<vector>&arr){ int n=arr.size(); vector<vector> painter(n, vector(n, 0));

for(auto it:v){
    int minrow=1000,maxrow=-1,maxcol=-1,mincol=1000;

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(arr[i][j]==it){
                minrow=min(minrow,i);
                maxrow=max(maxrow,i);
                mincol=min(mincol,j);
                maxcol=max(maxcol,j);
            }
        }
    }

    for(int i=minrow;i<=maxrow;i++){
        for(int j=mincol;j<=maxcol;j++){
            painter[i][j]=it;
        }
    }
}

for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
        if(arr[i][j]!=painter[i][j])
            return;
    }
}
res.insert(v[0]);

}

int main(){ int n; cin>>n; vector<vector> arr(n, vector(n)); vectorv; setelements; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>arr[i][j]; if(arr[i][j]!=0) elements.insert(arr[i][j]); } } for(auto it:elements){ v.push_back(it); } do{ if(!res.count(v[0])) trypermut(v,arr); } while(next_permutation(v.begin(),v.end()));

cout<<res.size()<<endl;

} here is my code I could not find my mistake it gets thirty points over hundred points and because input sizes are small enough I tried a brute force method can someone help me to find my mistake ? Thanks.

Tags geometry, brute force

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English Ahmet_Efendi 2025-07-09 10:22:06 1732 Initial revision (published)