摘要: 题目大意转化后是这样的:给了一个长度为 n(1≤n≤105) 的数组,求一个不相交的前缀和后缀,使得这个前缀和后缀中的所有数的异或值最大做法分析如果这种题目没见过类似的话,感觉挺神的,一个长度为 105 的数组,怎么去选前缀和后缀?不过不要惊慌,题目出出来是给我们做的,总有一线生机!先从最暴力的开始讲起:枚举每一个后缀,让他和所有不与之相交的前缀求异或值,那么转化成了: 给一个数 a,还有一堆数,怎么在这一堆数中找出一个数 b,a 和 b 的异或值最大?想想:肯定要先把 a 和这一堆数转化成二进制数,枚举 a 的最高位,要使异或值最大,那么 b 从最高位开始,就要尽量与 a 对应的位不同,.. 阅读全文
posted @ 2013-05-14 13:06 jianzhang.zj 阅读(981) 评论(0) 推荐(0) 编辑
摘要: 题目大意给两个数组,A 和 B,以及 m 个操作。每个数组中保存 n 个数,操作分两类: 1 x y k :把 A 数组中的 [x, x+k-1] 这个区间中的数复制到 B 数组中 [y, y+k-1] 去 2 x 询问 B 数组中,第 x 个数是多少题目保证复制和查询操作是合法的其中:1≤n,m≤105做法分析基础线段树,节点中保存的信息是:这一个区间是否被 A 数组覆盖,如果是,对应了 A 数组中的哪个区间,然后就是按照操作在线的模拟就行了注意: 复制操作是后来居上的,会把全面的覆盖掉 如果当前点没有被覆盖,那么查询的时候输出的是 B 数组中原来在这个位置上的数,否... 阅读全文
posted @ 2013-05-14 12:36 jianzhang.zj 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 题目大意由两个长度为 n 的 1~n 的排列,定义一个排列的加法:c(i)=(a(i)+b(i)-2)%n+1,如果 c 也是一个 1~n 的排列话,这就是一个可行的加法现在给你一个长度 n(1≤n≤16),让你共有多少种可行的排列对,使得他们的加法也是一个排列做法分析首先肯定有这样的思路:固定一个排列,比如令 a 为 1,2,...,n那么,我们找出所有 b 的情况数量 cnt,最终的答案就应该是 cnt*n!看到 n 的数量级,就想去暴力试试,但是算了下 16 的阶乘,蛮大的,不管了,先写一个暴力,加点小剪枝,十多分钟后,表打出来了:然后贴着表过了,好没节操参考代码1、打表的代码 1 #i 阅读全文
posted @ 2013-05-14 00:34 jianzhang.zj 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 题目大意对于两个数字串 S 和 W,如果存在 i 和 j 使得:S(i)>W(i) && S(j)<W(j) 那么说这两个串是不可比较的,现在给了两个长度均为 n(1≤n≤105) 的串 S 和 W,用 '?' 代表未知的字母,问,有多少种可能的情况,使得 S 和 W 不可比较?做法分析这是 Div2 为数不多的比较坑的题目,当时比赛的时候貌似的时候才两三百人过 求出所有可能的情况的数量,设为 ans 求出 S 比 W 大的情况,即:S(i)≥W(i) 的情况数量,设为 res1 求出 S 比 W 小的情况,即;S(i)≤W(i) 的情况数量,设为 阅读全文
posted @ 2013-05-14 00:23 jianzhang.zj 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 题目大意有 n(1≤n≤50) 个人,每个人的体重要么是 50,要么是 100。现在他们都在河岸的一边,有一条船,最大栽种量为 K(1≤k≤5000),问:把所有人从河这岸运送到河对岸去,最少需要划船多少次,以及共有多少种不同的坐船方案使得划船次数最少做法分析注意题目给出的条件,每个人的重量要么是 50 要么是 100,大家肯定都注意到这点了,怎么利用呢?这样考虑: 在某个时刻,重量为 50 的人有多少个,重量为 100 的人有多少个,他们是在河的哪一边?想到这里,大家肯定就有思路了,可以 BFS,也可以求最短路,这样,最少需要划船的次数就求出来了至于多少种方案,BFS 或者求最短路的过... 阅读全文
posted @ 2013-05-14 00:08 jianzhang.zj 阅读(426) 评论(0) 推荐(0) 编辑