1 条题解
-
0
首先不难发现,
- 旋转 时,=
- 旋转 时,=(上下颠倒左右翻转)
- 旋转 时,=
考虑贪心:遍历矩阵,每次答案加上 、、 和 全部变 1 的修改次数和全部变 0 的修改次数的较小值。 但是如果直接遍历矩阵,会导致重复计算(、、 和 每个点都会增加一次答案,总共计算四次)。第一是通过观察确定遍历范围或者直接在矩阵上修改,这里不再赘述。第二是因为每个点都计算了四次,直接把最终答案除以 4 即可
#include <bits/stdc++.h> using namespace std; int t,n; char c; int a[101][101]; int main(){ cin>>t; while (t--){ cin>>n; int ans=0; for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ cin>>c;//注意输入方式 a[i][j]=c-48;//转换为整数的形式 } } for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ int cnt=a[i][j]+a[j][n-i+1]+a[n-i+1][n-j+1]+a[n-j+1][i];//统计有几个1 ans+=min(cnt,4-cnt);//比较1和0的个数,谁少改谁 } } cout<<ans/4<<endl; } return 0; }
- 1
信息
- ID
- 1218
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 32
- 已通过
- 9
- 上传者