摘要:
题意:有个4*4的开关,里面有着16个小开关-+---------- '+'表示开关是关着的,'-'表示开关是开着的,只有所有的开关全被打开,总开关才会被打开。现在有一种操作,只要改变某个开关,那么这个开关的行列所在开关都会被改变-+-- 问,要打开总开关至少要改变多少次开关?并输出改变开关的位置。思路: 由于每个开关只有两种状态,那么对于这16个小开关,我们可以用2进制来压缩下,如果开关是打开的那么为'0',如果是关着的,那么为'1',如此,我们就可以从下到上,从右到左给这16个开关标记状态,如果以某个点为中心,那么这个点的行列 阅读全文
摘要:
题意:有个4*4的棋盘,上面摆着黑棋和白旗,b代表黑棋,w代表白棋,现在有一种操作,如果你想要改变某一个棋子的颜色,那么它周围(前后左右)棋子的颜色都会被改变(白变成黑,黑变成白),问你将所有棋子变成白色或者黑色最少的步数。思路:状态压缩+搜索。对于#include#include#include#includeusing namespace std;int t[20]={ 51200,58368,29184,12544, 35968,20032,10016,4880, 2248,1252,626,305, 140,78,39,19,};int M=1q; nod... 阅读全文
摘要:
题意:就是说,给出一个三行三列的数组,其中元素为1--8和x,例如:1 2 3 现在,需要你把它变成:1 2 3 要的最少步数的移动方案。可以右移r,左移l,上移u,下移dx 4 6 4 5 67 5 8 7 8 x思路:这是赤裸裸的康托展开了吧?不知道康托展开的同学可以百度百科........好吧,其实我想说的是,这个题目怎么分析出,要用到康托展开的。首先,遇到这样的题目,元素比较少,又可以用到搜索,但是状态数比较多,也就是说,我需要找到一种方式来压缩这些状态,使得... 阅读全文
摘要:
题意:给出n个点,m条边,要你判断最小生成树是否唯一。思路:先做一次最小生成树操作,标记选择了的边,然后枚举已经被标记了的边,判断剩下的边组成的最小生成树是否与前面的相等,相等,则不唯一,否则唯一......#include#include#include#includeusing namespace std;struct node{ int v1,v2; int dis; int flg;} s[10000];int cmp(const node a,const node b){ if(a.dis<b.dis) return 1; else ... 阅读全文
摘要:
题目大意是:一个由0,1组成的数字串~~,现在你问一个人,第i位到第j位的1的个数为奇数还是偶数。一共会告诉你几组这样的数要你判断前k组这个人回答的都是正确的,到第k+1组,这个人说的是错的,要你输出这个k,要是这个人回答的都是正确的,则输出组数odd为奇数,even为偶数。Sample Input1051 2 even3 4 odd5 6 even1 6 even7 10 oddSample Output3思路:赤裸裸的种类并查集吧.......其中,我们把一段区间为奇数标记为0,为偶数标记为1,然后如果区间连贯,也就是说区间1到区间2,区间3到区间4,那么就是可以连贯成区间1到区间4的,如 阅读全文