[USACO1.2]方块转换 Transformations

    xiaoxiao2021-03-25  125

    [USACO1.2]方块转换 Transformations

    这题写的好长。。。。 可以放到坐标系里考虑 eg:(x,y)和(-x,-y)中心对称,放到数组里就是(-x+n+1,-y+n+1)

    #include<cstdio> #include<cstring> using namespace std; int n; char s1[30][30],s2[30][30]; bool plan1(){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]!=s2[j][n-i+1]) return false; } } return true; } bool plan2(){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]!=s2[n-i+1][n-j+1]) return false; } } return true; } bool plan3(){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]!=s2[n-j+1][i]) return false; } } return true; } bool plan4(){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]!=s2[i][n-j+1]) return false; } } return true; } bool plan5(){ int i,j; int cnt1=0,cnt2=0,cnt3=0; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]==s2[n-j+1][n-i+1]) cnt1++; } } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]==s2[n-i+1][n-(n-j+1)+1]) cnt2++; } } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]==s2[n-(n-j+1)+1][i]) cnt3++; } } if(cnt1==n*n || cnt2==n*n || cnt3==n*n) return true; else return false; } bool plan6(){ int i,j; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ if(s1[i][j]!=s2[i][j]) return false; } } return true; } void solve(){ if(plan1()){ printf("1\n"); return; } if(plan2()){ printf("2\n"); return; } if(plan3()){ printf("3\n"); return; } if(plan4()){ printf("4\n"); return; } if(plan5()){ printf("5\n"); return; } if(plan6()){ printf("6\n"); return; } printf("7\n"); } int main(){ scanf("%d",&n); int i; for(i=1;i<=n;i++){ scanf("%s",s1[i]+1); } for(i=1;i<=n;i++){ scanf("%s",s2[i]+1); } solve(); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-19553.html

    最新回复(0)