摘要: A. ZOJ 3686 A Simple Tree Problem题意:给出一颗有根树,树的所有节点有一个值(0或1),最初这些值都为0定义另类操作:指定一棵子树,将它的子树的所有节点的值取反。指定一颗子树,求出它的子树的所有节点的值的和。比赛开始时先看的A题。一开始的想法是Splay。后来想到其实可以转化为线段树处理,206分钟2Y。做法不难想到,通过一个类先序遍历的方法,把所有节点子树的所有叶子节点找到(一边深搜一边将找到的节点哈希),回溯的时候记录下每个子树的最远叶子节点的hash值。实际上就是转化为区间问题了。View Code 1 #include 2 #include ... 阅读全文
posted @ 2013-04-01 22:35 dgsrz 阅读(947) 评论(1) 推荐(0) 编辑
摘要: 用一把宽度为n的指甲钳,去剪宽度为m的指甲,指甲钳可以正反面使用。用最少的次数剪完指甲。月赛的时候,我大致觉得是状态压缩,可是没有想到比较快的方法。大约50来分钟的时候,cl123神奇地1Y了……赛后看了下人家代码,貌似是一个贪心,但他的代码实际是错的……比如10*.******.*6人家的程序输出的是2,正解是1……今天上课的时候又想了下,状态压缩的确是可以做的。首先把 (1<<m)-1 作为指甲没剪时的初态(全是1),dp[x]保存的就是对于每个状态,需要剪的最少次数。当前状态x以二进制表示时,出现的1表示这一位置还留有指甲,0就是已剪去。而对于指甲钳,又可以将其以二进制表示, 阅读全文
posted @ 2012-11-27 19:44 dgsrz 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 这一次的浙大月赛依旧被虐惨。。。比赛中途还要去上课,坑爹=。=A题比赛时想的差不多了,没敲。。题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3644大意:从有向图的1号点出发,X初始为1号点的分数。每途径一个结点,X更新为X与当前结点的最小公倍数。且规定每次到达一个结点,X的值必须发生变化。求出有多少种方案可以从1号点走到N号点,且X=k。题解:记忆化搜索。dp[i][j] 保存到达i结点、X为j时的方案总数。分析题目可以发现,每一步可行的走法下X始终是k的因子。由于X可以很大,不妨将k的所有因子用map哈希下, 阅读全文
posted @ 2012-10-01 22:44 dgsrz 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给出的按键方法(数字)可以匹配多少个字符串解法:这道题一开始我考虑的是字典树。诚然,字典树可以过本题而且效率不低。不过很快队友发现题目给出的数字最多才6位。题目一下子就简化了。hash每个数字键可能出现的字符,开一个10^7的数组记录每个按键方案的匹配次数。输入字符串时,通过上面的hash数组,将其还原为数字表示,然后用O(1)的方法更新相应按键方法的匹配次数即可。一处内存优化,记录匹配次数的数组可以用short类型,数据保证不超过5000。最后15ms过了本题。 1 #include <cstdio> 2 #include <iostream> 3 usin 阅读全文
posted @ 2012-09-09 20:14 dgsrz 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 水了。。。彻底水了。。。线段树都成水题了有木有!!!ACM路茫茫。。比赛题解:http://page.renren.com/601081183/note/861865911A题KMP求next数组即可View Code 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 char a[50], b[100002], mapp[50]; 6 int pat[100002]; 7 8 void getNext(char s[], int next[]) 9 {10 int i, j, len 阅读全文
posted @ 2012-07-22 22:38 dgsrz 阅读(183) 评论(0) 推荐(0) 编辑
摘要: stl提供了三个最基本的容器:vector,list,deque。vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载。但由于链表的特点,它可. 阅读全文
posted @ 2012-07-16 16:11 dgsrz 阅读(807) 评论(0) 推荐(0) 编辑
摘要: 1,建议x,y,z直角坐标系。设A、B、C少拿点的坐标分别为(a1,b,1,c1),(a2,b2,c2),(a3,b3,c3),四面体O-ABC的六条棱长分别为l,m,n,p,q,r;2,四面体的体积为,由于现在不知道向量怎么打出来,我就插张图片了,将这个式子平方后得到:3,根据矢量数量积的坐标表达式及数量积的定义得又根据余弦定理得4,将上述的式子带入(1),就得到了传说中的欧拉四面体公式在这里说明一点这里面的推导我也是看的,要是是我自己推出来的,我不就欧拉了,哈哈。poj有一道就是关于这个公式的,说实话出这种题很没意思,如果你不知道公式基本上就做不出来,又一次我们学校比赛,有一哥就出了这个题 阅读全文
posted @ 2012-07-13 15:23 dgsrz 阅读(6464) 评论(1) 推荐(0) 编辑
摘要: 题目描述:Bob有N个数字组成的序列。它们都是如此的吸引人,让Alice乞求获得其中的连续部分(所谓连续部分就是连续子序列)。然而,Bob只允许Alice随机地选择。你能否求出所有选择的数字进行与、或、异或操作之后的期望?输入:第一行包含一个整数T(1<=T<=50),表示有T组输入案例。每个案例的第一行包括一个整数N(1<=N<=50000)案例第二行有N个整数,表示这个序列。所有整数都落在[0, 10^9]范围内。输出:对于每组测试案例,输出“Case #t: a b c”,其中t是从1开始的测试案例的编号,a是与AND运算的期望,b是或OR运算期望,c是异或XOR 阅读全文
posted @ 2012-07-04 09:34 dgsrz 阅读(726) 评论(1) 推荐(0) 编辑
摘要: 本例主要是利用归并排序求逆序对数只要在归并排序的基础上添加一行计数即可View Code 1 //--------------------------------------- 2 // 利用归并排序(MergeSort)求逆序对数 3 // http://baike.baidu.com/view/90797.htm 4 // 归并排序主要采用分治思想,分为若干子序列排序 5 // 时间空间复杂度和QuickSort相同,但更稳定 6 //--------------------------------------- 7 #include <cstdio> 8 #include & 阅读全文
posted @ 2012-07-02 10:22 dgsrz 阅读(142) 评论(0) 推荐(0) 编辑
摘要: DescriptionYou have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval.InputThe first line contains two numbers N and Q. 1 ≤ 阅读全文
posted @ 2012-06-30 21:36 dgsrz 阅读(138) 评论(0) 推荐(0) 编辑