bzoj3517 翻硬币 数学
2015-12-20 07:56
295 查看
这道题网上似乎并没有找到题解啊,唉只能自己想了。
显然每个点只用翻一次,记x(i,j)表示(i,j)这一个翻不翻,同时记a(i,j)表示这一个的初始情况。简单推理可以发现全翻成0和全翻成1的方法刚好是互补的,换句话说只要求除了翻成0的步数,翻成1的步数也就可以求出来了。下面求翻成0的步数。
考虑(i,j),对它有影响的是纵坐标为j的x(u,j)和横坐标为i的x(i,v),根据它最后为0可以得到一个方程:
x(1,j)^x(2,j)^...^x(n,j)^x(i,1)^...^x(i,j-1)^x(i,j+1)^...^x(i,n)^a(i,j)=0,注意左边x(i,j)只能出现一次,将a(i,j)移项得到:x(1,j)^x(2,j)^...^x(n,j)^x(i,1)^...^x(i,j-1)^x(i,j+1)^...^x(i,n)=a(i,j),记为等式f(i,j)。显然有n^2个变量和n^2个方程,所以其有唯一解。下面来解这个方程。
将f(i,j)与所有横坐标=i的和纵坐标=j的f()抑或,推理一下可以发现,由于n是偶数,左边只剩下了x(i,j),右边则是所有横坐标=i和纵坐标=j的a()的抑或值。所以就可以把x(i,j)求出来了。
虽然讲了这么多,但是代码还是很短的:
by lych
2015.12.20
显然每个点只用翻一次,记x(i,j)表示(i,j)这一个翻不翻,同时记a(i,j)表示这一个的初始情况。简单推理可以发现全翻成0和全翻成1的方法刚好是互补的,换句话说只要求除了翻成0的步数,翻成1的步数也就可以求出来了。下面求翻成0的步数。
考虑(i,j),对它有影响的是纵坐标为j的x(u,j)和横坐标为i的x(i,v),根据它最后为0可以得到一个方程:
x(1,j)^x(2,j)^...^x(n,j)^x(i,1)^...^x(i,j-1)^x(i,j+1)^...^x(i,n)^a(i,j)=0,注意左边x(i,j)只能出现一次,将a(i,j)移项得到:x(1,j)^x(2,j)^...^x(n,j)^x(i,1)^...^x(i,j-1)^x(i,j+1)^...^x(i,n)=a(i,j),记为等式f(i,j)。显然有n^2个变量和n^2个方程,所以其有唯一解。下面来解这个方程。
将f(i,j)与所有横坐标=i的和纵坐标=j的f()抑或,推理一下可以发现,由于n是偶数,左边只剩下了x(i,j),右边则是所有横坐标=i和纵坐标=j的a()的抑或值。所以就可以把x(i,j)求出来了。
虽然讲了这么多,但是代码还是很短的:
#include<iostream> #include<cstdio> using namespace std; int n,a[1005][1005],sum1[1005],sum2[1005]; char ch[1005]; int main(){ scanf("%d",&n); int i,j; for (i=1; i<=n; i++){ scanf("%s",ch+1); for (j=1; j<=n; j++){ a[i][j]=ch[j]-'0'; sum1[i]^=a[i][j]; sum2[j]^=a[i][j]; } } int ans=0; for (i=1; i<=n; i++) for (j=1; j<=n; j++) ans+=sum1[i]^sum2[j]^a[i][j]; printf("%d\n",min(ans,n*n-ans)); return 0; }
by lych
2015.12.20
相关文章推荐
- LeetCode - Remove Nth Node From End of List
- 【Beta阶段】第八次Scrum Meeting!
- error: 'for' loop initial declarations are only allowed in C99 mode
- sameersbn/gitlab6.9.2实战
- UVAlive2531 The K-League(最大流)
- 向操蛋的行规说NO!
- 2016太原网络营销师郭文军讲解如何运营自媒体下的【百度贴吧】
- 完全纯净!你的最佳PE工具箱-微PE
- C语言递归调用2:猜数小游戏
- Leetcode: Palindrome Linked List
- LeetCode - 4Sum
- VS 2008 也能玩转 Node.JS!
- android fragment
- 310. Minimum Height Trees
- 《世界是数字的》读后感二
- 【jQuery】自定义类级别插件—— twoaddresult
- 算法学习笔记:排序算法整理
- 【jQuery】自定义对象级插件——lifocuscolor插件
- Lesson5 一阶自治微分方程
- 【jQuery】右键菜单插件——contextmenu