上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 32 下一页
摘要: 数论+打表A的所有因子和位B,B的所有的因子和为A,则称{A,B}是一对ooxx number输入数字n,求出[1,n]里面有多少对ooxx number,其中(A,B),(B,A)这样算作一对n最大为5百万(50000000)hits 220= (1+2+4+71+142) <--- 284,284= (1+2+4+5+10+11+20+22+44+55+110) <--- 220。220 and 280 is a pair of ooxx numberssample input3001300sample output12定义sum[i]=i的因子和,用筛法来构建i枚举因子i.. 阅读全文
posted @ 2013-04-21 23:47 Titanium 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 线段树题意:有一个长H宽W的板,上面贴纸条,纸条都是长1宽w的,贴纸条的原则是,不能覆盖或重叠别人的纸条,尽量往上贴,进而尽量往左贴第一行3个数字,H,W,N,N表示有N个纸条,下面n行每行一个数字,表示每个纸条的宽,每个输入对应一个输出,就是这个纸条放在哪一行,如果没地方放它就输出-1数据很大,不过是纸老虎,因为H=min(H,N),这个很容易理解,行数多了也用不上。/*h=min(h,Q);线段树区间长度为h,每个叶子a[i]表示第i行剩下的长度,一开始都是w对于每个询问,我们其实是将长度为l的长条放入一行呢,即对应放到a数组的一位里,要满足a[i]>=l,并且最靠左所以问题转化为在 阅读全文
posted @ 2013-04-20 00:11 Titanium 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 暴力训练的题目,给出一个数字(最长1000位即10^1000),给出m表示交换次数(每次可以交换任意两位的数字),问交换后得到的最小数字。注意,数字不能有前导0,另外有m次交换机会,但不必全部用完,只要交换到最小数字了就可以退出为了得到最小数字,就是从高位开始,不断找最小的数字放到高位(但第一位要特殊处理不能为0)。如果现在使第i位最小,从第i到最后一位扫描找到最小值然后交换然后交换次数减1,如果刚好第i位就是最小值,则不交换,直接跳过,所以交换次数不能减1。如果m>len,即大于数字的位数,那么显然后面的交换机会都是多余的,最多交换len次就可以退出了所以结束枚举的条件是,以为枚举了全 阅读全文
posted @ 2013-04-19 13:19 Titanium 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 计算几何训练的题目,给出n个点的坐标(整数),选3个点组成三角形问能形成多少个锐角三角形直接暴力解决,用三个for循环枚举3个点(升序枚举避免重复),然后用余弦判断三角形中三个角是否为锐角判断一个角为锐角:已知j,i,k三个点形成一个角,以i为交点向j,k做两个向量a,b,用余弦定理cos = a*b/( |a| * |b| ) ,因为|a|*|b|必为正整数而且我们不是要算确切的角度只是判断锐,直,钝角所以直接用 a*ba*b=0 , 直角a*b>0 , 锐角或0度a*b<0,钝角或180度所以不用单纯靠 a*b 的正负来判断是什么叫,对于a*b>0的情况还要判断是否为0度 阅读全文
posted @ 2013-04-19 12:51 Titanium 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 线段树求面积并升级版题意中文,不解释这题的代码在一般的线段树求面积并的基础上进行了修改,但是所用的思想是一样的,所以不难理解回忆一下一般的求矩形覆盖面积,线段树节点里面有一个重要的变量,cnt。这个变量表示了该节点表示的区间被完全覆盖,如果cnt=0,说明没有被完全覆盖(但不代表没有被覆盖),要算出该节点所代表的区间被覆盖的长度,需要由它左右孩子节点被覆盖的长度相加所得。如果cnt=1,表示被完全覆盖,覆盖长度就是该区间长度。如果cnt>1说明也是被完全覆盖,不过不止覆盖了一次,在算覆盖长度的时候,和cnt=1的计算方法是一样的。注意一点,节点里还有另一个变量len,就是该区间被覆盖的长 阅读全文
posted @ 2013-04-14 21:09 Titanium 阅读(3409) 评论(3) 推荐(2) 编辑
摘要: 找规律题同样是训练的题目题目:给出n,得到一个n*n的方阵,n保证为奇数,从第1行最中间的位置开始填1,然后以某种规则一直填数,每次填2,3,4,5……直到n*n。填充规则是每次把下一个数填在现在位置的右上方(即上移一格再右移一格),如果另外把这个方阵看做一个环,如果现在位于第一行,上移一格其实移到了最底那行,如果现在位于最右边那列,右移一格就是移到了最左边那列,同样的,如果刚好位于右上角,移动后就在左下角了;另一部分,在移动到右上方的时候,如果右上方已经被填充了,那么就不能向右上移动,而是向下移动,然后再继续向右上移动,画个图便知最后要求,右下角那个位置填的数字时多少这题的规律还是不难找到答 阅读全文
posted @ 2013-04-13 18:22 Titanium 阅读(272) 评论(0) 推荐(1) 编辑
摘要: 图论今天训练的题目,题意:有一些工作要做必须等某些工作做完了才能开始,每个工作也要花费时间去做。输入先给出n,m,表示有n个工作,要求完成第m个工作的最短时间(工作从1到n标号),下面n行给出每个工作的信息,每行第一个数表示做这个工作要多少时间,后面可能有1个或多个或0个数字,表示这个工作要在这些工作做完后才能动工。另外注意一点,同一个时刻只能做一个人工作,不能同时进行多个工作这题一开始看错,以为又是关键路径,敲了模板发现wa,才看到那句话,同一个时间只能做一个工作不能同时进行多个工作,因为这个条件,这道题可以说和关键路径就毫无关系了。后来想不出方法,在队友的提醒下想到了正解。其实我们只要知道 阅读全文
posted @ 2013-04-13 17:52 Titanium 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 两种方法详细分析:线段树辅助——扫描线法计算矩形周长并(轮廓线)第一种,对横线和竖线做相同的操作/*对横线和竖线做两次一样的操作这题不需要离散化*/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 5010#define MAX 10010#define lch(i) ((i)<<1)#define rch(i) ((i)<<1|1)int res;struct segment{ int l,r,h,v;}sx[2* 阅读全文
posted @ 2013-04-13 17:34 Titanium 阅读(1566) 评论(0) 推荐(0) 编辑
摘要: 例题:hdu 1828 Picture有两种方法,不过常用的第二种,两种都说一下。第一种:把矩形分成横线和竖线去处理,可知是完全相同的操作,我们来讲下怎么算出横线部分,竖线部分就是照搬即可。将横线保存在一个表中,按横线所处的竖直位置排序(升序),另外每条横线带一个标记值,原矩形的下线为1,上线为-1(对应过去就是插入线段和删除线段)从低到高扫描横线,没扫到一条横线就能计算出一部分横线值。计算方法是算出现在总区间的被覆盖的长度,然后求出与上一次的总区间的覆盖长度的差(即相减求绝对值),因为每次添加了一条线段,如果没有没有使总区间覆盖长度发生变化,说明这条线段其实在多边形的内部,被覆盖掉了,不能计 阅读全文
posted @ 2013-04-13 17:32 Titanium 阅读(2935) 评论(0) 推荐(2) 编辑
摘要: 推荐技术公众号:不爱睡觉的大猪 分析: 1.矩形比较多,坐标也很大,所以横坐标需要离散化(纵坐标不需要),熟悉离散化后这个步骤不难,所以这里不详细讲解了,不明白的还请百度 2.重点:扫描线法:假想有一条扫描线,从左往右(从右往左),或者从下往上(从上往下)扫描过整个多边形(或者说畸形。。多个矩形叠加 阅读全文
posted @ 2013-04-12 15:33 Titanium 阅读(11256) 评论(6) 推荐(11) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 32 下一页