摘要:解题思路: 枚举10^6内的所有素数 诡异的是,采用10^10进制的时间比采用10^3进制时间大,不明真相 程序中采用的是10^12进制代码
阅读全文
摘要:这还是以前在spoj上A的一道题,不过直接在poj提交时Time Limit Exceeded,本打算有时间把算法重新优化一下,昨天无聊把输入改为scanf试试,没想到竟然过了,意料之外。简单的讲一下思路:我们先考虑平面求面积的情况:图1图2考虑与x轴平行的线段,沿y轴从下往上1)出现重叠就删除重叠部分2)出现相接部分就连接起来例 图1首先出现线段(0,0)-(10,0),长度l=10,往上遇到(0,3)-(3,3)、(7,3)-(10,3),相对高度h=3,此时面积增加Δs=l*h=30; 按照原理1)此时线段变为(3,3)-(7,3), l=4往上遇到(0,7)-(3,7)、(7,7)-
阅读全文
摘要:解题思路:组合数学1-递推:C(m,n)=c(m-1,n)+C(m,n-1),时间复杂度O(m*n)2-组合,时间复杂度O(min(m,n))代码
阅读全文
摘要:求解思路: 1求解该位置所在的循环序列 Line:14~16 2 求解该位置数的位数 Line:17 3 求解该位置的数 Line:18 4求解该数的的对应位置的数值[代码]
阅读全文
摘要:解题思路:组合数学题,注意题目要求升序排列类似于POJ3252,c[i][j]存储(choose i from j 的)组合值[代码]
阅读全文
摘要:解题思路:1. d[i][j]表示需i位二进制表示且1的个数不大于j(首位为1)的数的总和2. 对数a,假设其二进制需要i位表示 a)求不大于a round Number总和Line 6~8 b)如果j位为1,假设目前为止总共已出现k个1,求解位数小于j位且1的个数不大于i/2-k的数总和 Line 9~13好烂的代码
阅读全文
摘要:解题思路:类LCSopt[i][j]表示第一个字符的前i个字符与第二个字符前j个字符的最大匹配值[代码]Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--#include iostreamusing namespace std;inline int ctoi(char c){ switch (c) { case 'A': return 0; case 'C':return 1; case 'G':return 2; default:return
阅读全文
摘要:解题思路:dpdp方程:[代码]//opt[i]=min{opt[j]+[a[j+1]+....+a[i]+10]*p[i]}//CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--#includeiostreamusing namespace std;#define MAXN 1e9int main(){ int n,i,j,c,m,t,a[100],p[100],opt[101]={0}; scanf("%d", &n); while
阅读全文
摘要:解题思路:正反方向最长递增子序列(参照POJ2533),然后枚举中心[代码]
阅读全文
摘要:解题思路:DPopt[i]表示到i为止最少需要除去多少字符[代码](if msg[i]==word[k][len[k]] && msg[j+1,i]包含word[k]);NULL
阅读全文
摘要:解题思路:dp(多重背包问题)将多重背包转化为01背包,假设每个物品的数量上限为n,每件的体积为0,价值为w那么可以把该物品分为1,2,4,...,2^(k-1)和n-(2^k+1),那么新的物品就是(体积,价值):(0,w),(0,2w),...,(0,2^(k-1)w)和(0,(n-2^k+1)w)(这样可以构造出任何=n的情况,假设n为7,则分成系数为1,2和4,那么1-7的所有情况均可由1,2,4这3个基数组合得到)NULL
阅读全文
摘要:解题思路:DPg[i]表示第i个砝码的重量,c[j]表示第j个点的坐标,opt[i][k]表示加了i个砝码,力矩之和为k的方法数DP公式为(考虑到力矩为负,因此需要做偏移):[代码]第i次迭代只于i-1次有关,因此可以缩减为二维数组NULL
阅读全文
摘要:解题思路:1)首先计算0-9999之间的素数2)BFS,每次更改4位数字中的一位数字(首位数字不能为0),判断是否为素数,是且未被访问过的加入到队列里面3)队列为空,或者发现目的素数,停止NULL
阅读全文
摘要:解题思路:1)每5位为一个基数,枚举5位所有只包含0,1的数ans[],map[i][j]保存(ans[j]*100000^i)%n的值2)BFS计算所有组合出现的模,直到出现0代码
阅读全文
摘要:解题思路:1)靠左走,方向优先级为左-前-右-后2)靠右走,方向优先级为右-前-左-后2)最短路,广度优先NULL
阅读全文
摘要:解题思路:深度优先搜索,考虑到字典顺序,需仔细设计方向顺序bad
阅读全文
摘要:解题思路:trie树+并查集(判断是否属于同一集合)+欧拉通路判断代码
阅读全文
摘要:解题思路:基于最小堆实现HaffmanNULL
阅读全文
摘要:解题思路:枚举两个顶点作为对角边,计算正方形另一对角边的两个顶点,查找这两个顶点是否都存在此思路中每个正方形均会计算两次,所以最后结构需要/2NULL
阅读全文
摘要:解题思路:hash+枚举0 0 0 0 0 输出 1e10,因此需要64位整数某一系数为0,做一点优化NULL
阅读全文
摘要:解题思路:独立概率事件,因此可以分别计算概率首先计算所有队伍解决题目=1的联合概率P0,计算所有队伍解决题目个数在[1,n-1]区间的联合概率Pndp求解每个队伍解题概率:dp[i][j]表示i题时解决j道题的概率,dp方程为[代码]欢迎review
阅读全文
摘要:解题思路:hash统计到当前位置为止,各位上出现1的个数,相对于最小次数的差值比较出现相同差值序列的最长距离即可欢迎指教
阅读全文
摘要:解题思路:并查集并查集的思想与POJ1182 食物链相同枚举所有Judge ID 情况: 如果有且仅有一个ID没有产生矛盾,则说明该ID即为Judge,且发现的最初回合为其余首次发现矛盾回合的最大值 如果没有ID产生矛盾,输出Can not determine 如果有一个以上ID产生矛盾,输出Impossible欢迎指教
阅读全文
摘要:解题思路:并查集+dp分析易知:如果答案为"no",则xi,yi属于两种不同类型(1),否则为同一类型(0)a)并查集的思想类似于POJ 1733 Parity Game relation[i]表示节点i与根节点关系b)此时,我们将所有人分成了几个(s)不同的集合,每个集合分为两类:与根节点同类的,与根节点不同类的。c)题目转化为求解是否存在唯一解:取每个集合中的一种类型(必须且仅取一种),累计人数为p1 题目转化为动态规划问题,dp[i][j]表示节点i(包括i)之前,人数不超过j的最大人数 node[i].s表示与该节点同类型的节点个数,node[i].d表示与该节点类型不同的节点个数
阅读全文
摘要:解题思路:hash离散化+并查集首先我们不考虑离散化:s[x]表示(root[x],x]区间1的个数的奇偶性,0-偶数,1-奇数每个输入区间[a,b],首先判断a-1与b的根节点是否相同a)如果相同表示(a-1,b]之间1的个数奇偶性已知s((a-1,b])=s[a-1]^s[b],此时只需简单判断即可b)如果不同,我们需要合并两个子树,我们将root较大的子树(例root[a])合并到root较小的子树(例root[b]),且此时s[root[a]]=s[a]^s[b]^s((a-1,b])在路径压缩的过程中s[i]=s[i]^s[root[i]],s[root[i]]为(root[root
阅读全文
摘要:本文中排序都是采用的从小到大排序1)对int类型数组排序[代码]2)对char类型数组排序(同int类型)[代码]3)对double类型数组排序(特别要注意)[代码]4)对结构体一级排序[代码]5)对结构体二级排序[代码]6)对字符串进行排序[代码]7)计算几何中求凸包的cmp[代码]注意一点,在进行比较的时候使用 *(int *)a - *(int *)b是有bug的,当a达到int的最小值(-2^31),b达到int的最大值(2^31 - 1),会溢出,结果就不对
阅读全文
摘要:并查集,relation数组保存当前节点与根节点的关系,0表示当前节点与根节点同类,1当前节点吃根节点,2根节点吃当前节点,关系推导公式可见poj discuss,不过由于节点合并方式不一样,所以推导函数有细微的差别。代码
阅读全文
摘要:连续两天遇到并查集的问题,还是认真的看了下并查集的相关资料,再此总结一下:什么是并查集: 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。常常在使用中以森林来表示。进行快速规整。主要操作的解释及代码: 1、初始树的建立,每个元素的父节点指向它本身[代码] 2、查找一个元素所在的集合,找到这个元素所在集合的根节点,判断两个元素是否属于同一集合,只要看他们所在集合的根节点是否...
阅读全文
摘要:计算逆序个数,方法参照《算法设计》(美)克林伯格,5.3节代码
阅读全文