摘要:
题目大意:给出一个数列,求最大区间异或和。异或和相同时取终点最靠前的,仍相同取最短的。简单题解:先求出前缀和。对每个数,将其前一项的前缀和插入0-1树中。然后在该树中,从高位到低位(贪心思想),查询与当前前缀和的各位尽可能不同的前缀。然后更新答案。我的代码: 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:cowxor 5 */ 6 #include<cstdio> 7 #include<cstring> 8 FILE *fi=fopen("cowxor.in","r"),*fo=fopen("co 阅读全文
摘要:
题目大意:给出r*c的矩阵中p个障碍点的位置,求能放置矩形的最大面积。简单题解:令h[i][j]表示(i,j)到竖直向上的最近障碍点(或顶端)的线段的长度,left[i][j]、right[i][j]分别表示该线段向左、右延伸的长度。则max{h[i][j]*(left[i][j]+right[i][j]-1)}即为答案。使用动态规划求h[i][j]、left[i][j]、right[i][j]。我的代码: 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:rectbarn 5 */ 6 #include<cstdio> 7 #define up(x,y) if 阅读全文
摘要:
题目大意:求4*n的网格中哈密顿回路的条数。简单题解:基于连通性状态压缩的递推。可以看我之前写的betsy的题解betsy题解本题由于一维只有4,所以可以手动计算所有状态与转移。具体参见代码。我的代码: 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:vans 5 */ 6 #include<cstdio> 7 #include<cstring> 8 FILE *fi=fopen("vans.in","r"),*fo=fopen("vans.out","w"); 9 c 阅读全文
摘要:
题目大意:一种语言以5*5的矩阵表示,分别填入‘A’-‘Y’,要求每一行、每一列都递增。为方便,将所有合法矩阵按字典序大小编号。要求实现矩阵与编号的转换。简单题解:刚看到这题的时候,毫无头绪。看了NOCOW上的题解才恍然大悟。这题卡了我4天。蛋疼的是,第二天的时候我已经改对了,但是将输出与样例比对时坑爹了....矩阵转编号:如矩阵ACEGI......只需求出以AB、ACD、ACEF、ACEFH......开头的矩阵的数目之和再加1即可。编号转矩阵:顺次枚举每一位,若当前方案开头的矩阵数目小于n则减去,否则即可确定当前位。如何求以固定串开头的矩阵数目呢?记忆化搜索!令f[a][b][c][d] 阅读全文
摘要:
题目大意:给你一个长为l的字符串s,求它的最小表示法的最小起始位置。最小表示法:将原字符串看成循环串,从某处开始的字典序最小的串。简单题解:参见2003周源论文《浅析“最小表示法”思想 在字符串循环同构问题中的应用》。初始化两个指针i=0,j=1。依次向后匹配,若失配,则将失配字符较大的指针移到失配字符之后。我的代码: 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:hidden 5 */ 6 #include<cstdio> 7 #define min(x,y) ((x)<(y)?(x):(y)) 8 FILE *fi=fopen("hidd 阅读全文
摘要:
题目大意:给定一个无向图与两个点,问最少去掉几个点(不能去掉给定的点)能使这两个点不连通,并输出字典序最小的方案。简单题解:这个问题是要求该图的最小点割集,可以使用最小割最大流定理。但是最小割是边的割,该怎么办呢?拆点!将每个点拆成入点和出点。所有入边连到入点上,出边从出点连出,流量均为+INF。再在入点和出点间连一条流量为1的边。然后做最大流即为答案。至于输出最小字典序方案的问题,可以参考milk6,从小到大枚举删点,若删去后流量减少了1,则输出。我的代码: 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:telecow 5 */ 6 #include<cstdi 阅读全文
摘要:
题目大意:求n*n的网格中,以左上角为起点,以右下角为终点的哈密顿路径的条数。哈密顿路径:经过且只经过所有点一次的路径。简单题解:看到哈密顿路径,我们就自然地想到了基于连通性状态压缩的递推。参见2008年陈丹琦的论文《基于连通性状态压缩的动态规划问题》。(吐槽:是递推啊。。)由于路径起点和终点固定,为使问题简单化,我们可以将起点与终点连结起来,转化为哈密顿回路。为方便转移,将网格顺时针旋转90°。我的代码: 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:betsy 5 */ 6 #include<cstdio> 7 #include<cstr 阅读全文
摘要:
题目大意(转自NOCOW,有缩减):这个问题需要你写一个程序完成字符识别的任务。每个完整的字符图案有 20 行,20 位。每个位是“0”或“1”文件 font.in包括了27个字符图案的信息,以这样的顺序记录:_abcdefghijklmn其中 _ 表示空格字符。每个完整字符长 20 行。输入文件包含一个或多个可能损坏的字符图案。一个字符图案可能以这些方式被损坏。最多有一行可能被复制了(就接在原来那一行的下面)最多有一行可能丢失了有些“0”可能被改成“1”有些“1”可能被改成“0”不会有任何一个字符图案既多余了一行并且又丢失了一行。被复制的那一行中,原来的行和多余的行可能都损坏了,而且损坏的部 阅读全文
摘要:
从5.4.3开始,记录我的一点一滴。 1 /* 2 ID:t-x.h1 3 LANG:C++ 4 TASK:USACO 5 */ 6 7 int main() 8 { 9 int power=0;10 while(1)11 ++power;12 return 0;13 } 阅读全文