1 条题解

  • 0
    @ 2025-8-24 23:17:10

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar syh110213
    mmm……

    搬运于2025-08-24 23:17:10,当前版本为作者最后更新于2025-05-31 19:58:40,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门\huge 题目传送门

    题意

    对于一个正三角形,求其通过旋转和对称变换所得的 66 种数组与 BB 数组数值不同的位置的数量的最小值。

    思路

    一道简单的模拟题。

    AA 数组翻转两次,分别与 BB 数组比较。
    再对称变换后,翻转两次,分别与 BB 数组比较。

    code

    #include<bits/stdc++.h>
    using namespace std;
    int n,b[15][15],ans=INT_MAX;
    void contrast(int w[15][15]){//比较函数
    	int sum=0;
    	for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) if(w[i][j]!=b[i][j]) sum++;
    	ans=min(ans,sum);
    }
    int main(){
    	scanf("%d",&n);
    	int a[15][15],a1[15][15],a2[15][15];//通过旋转获得的
    	for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]);
    	for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&b[i][j]);
    	contrast(a);
    	for(int j=n,x=1;j>=1;j--,x++) for(int i=j,y=1;i<=n;i++,y++) a1[x][y]=a[i][j];//旋转一次
    	contrast(a1);
    	for(int j=n,x=1;j>=1;j--,x++) for(int i=j,y=1;i<=n;i++,y++) a2[x][y]=a1[i][j];//旋转两次
    	contrast(a2);
    	int c[15][15],c1[15][15],c2[15][15];//通过1次对称变换和旋转获得的
    	for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) c[i][j]=a[i][i-j+1];//对称变换
    	contrast(c);
    	for(int j=n,x=1;j>=1;j--,x++) for(int i=j,y=1;i<=n;i++,y++) c1[x][y]=c[i][j];//旋转一次
    	contrast(c1);
    	for(int j=n,x=1;j>=1;j--,x++) for(int i=j,y=1;i<=n;i++,y++) c2[x][y]=c1[i][j];//旋转两次
    	contrast(c2);
    	printf("%d",ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    12413
    时间
    2000ms
    内存
    1024MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者