Submission #92653

#TimeUsernameProblemLanguageResultExecution timeMemory
92653SamAndRiddick's Cube (IZhO13_riddicks)C++17
100 / 100
6 ms504 KiB
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N=7,INF=100500; int ans=INF; int a[N][N]; int b[N][N]; int c[N][N]; int n,m; int t[N],s[N]; bool stg() { bool z=true,z1=true; for(int i=0;i<n;++i) { for(int j=0;j<m;++j) { if(c[i][j]!=c[i][0]) z=false; } } for(int j=0;j<m;++j) { for(int i=0;i<n;++i) { if(c[i][j]!=c[0][j]) z1=false; } } return (z||z1); } void ab() { for(int i=0;i<n;++i) { for(int j=0;j<m;++j) { b[(i+s[j])%n][j]=a[i][j]; } } } void bc() { for(int i=0;i<n;++i) { for(int j=0;j<m;++j) { c[i][(j+t[i])%m]=b[i][j]; } } } void ubd() { ab(); bc(); if(stg()) { int yans=0; for(int i=0;i<n;++i) { yans+=min(t[i],m-t[i]); } for(int i=0;i<m;++i) { yans+=min(s[i],n-s[i]); } ans=min(ans,yans); } } bool stg1(int x,int r) { int q[N],p[N]; for(int i=0;i<m;++i) { q[(i+t[0])%m]=b[0][i]; p[(i+r)%m]=b[x][i]; } for(int i=0;i<m;++i) if(p[i]!=q[i]) return false; return true; } void rec(int x,int y) { if(x==n && y==m) { ubd(); return; } if(y!=m) { for(int i=0;i<n;++i) { s[y]=i; rec(x,y+1); } } else { if(x==0) { ab(); for(int i=0;i<m;++i) { t[x]=i; rec(x+1,y); } } else { int z=INF,zi; for(int i=0;i<m;++i) { if(stg1(x,i) && min(i,m-i)<z) { zi=i; z=min(i,m-i); } } if(z==INF) return; t[x]=zi; rec(x+1,y); } } } int main() { //freopen("riddicks.in","r",stdin); //freopen("riddicks.out","w",stdout); ///in cin>>n>>m; for(int i=0;i<n;++i) for(int j=0;j<m;++j) cin>>a[i][j]; ///// rec(0,0); //out cout<<ans<<endl; // system("pause"); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...