题解:P12657 [KOI 2023 Round 1] 两个正三角形
CARLZHUANG114514 · · 题解
分析
首先看旋转。
如果转
再看对称变换。
如果转
所以就只要操作
所以暴力就可以了。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,a[12][12],b[12][12],c[12][12],ans=INT_MAX;
void f1(){//旋转
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
c[n-i+j][n-i+1]=a[i][j];
}
}
memcpy(a,c,sizeof(c));
return;
}
void f2(){//对称
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
c[i][i-j+1]=a[i][j];
}
}
memcpy(a,c,sizeof(c));
return;
}
int check(){//计算答案
int sum=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
if(a[i][j]!=b[i][j]) sum++;
}
}
return sum;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>b[i][j];
}
}
ans=check();
for(int i=1;i<=3;i++){//暴力
f1();
for(int j=1;j<=2;j++){
f2();
ans=min(ans,check());
}
}
cout<<ans;
return 0;
}