随笔分类 - sgu
摘要:给定N个数,每两个数有一个最大公约数,求最大的最大公约数。N<=10^5,每个数<=10^6枚举求是N^2*logN的,必定超时换一个思考的角度,如果我们假设最大公约数是多少,用多少时间可以判定是否成立呢?假设判定x,那么给变量每次加x,看有没有这个值,有的话就计数器加一,计数器一旦大于1,就成立,跳出即可。这样,我们开一个10^6的数组,v[i]记录值为i的数的个数,判定有没有值时就是O(1)的了,总体时间在max_number*logN左右View Code 1 program sgu499(input,output); 2 var 3 v : array[0..11000..
阅读全文
摘要:一道看起来算法很明确的题目:给定N条平面上的线段,问最早在哪条线段处出现封闭图形,保证线段不相交。对平面上的点进行离散,之后用并查集维护,一旦出现两个端点在同一集合中,终止算法,输出即可。离散化的地方有必要说一下,很多人用HASH,很慢的,有人用平衡树,C++调库,psacal就吃了亏——说一下本人离散方法,三棵平衡树,第一棵存x坐标,第二棵存y坐标,第三棵存{(x在一中的排位)*一中的x个数+(y在二中的排位)}这样可以确定每个坐标都对应三中的一个值,不会有重复。AC的感觉不错!还要墨迹几句,SGU交pascal不能用exit(x),真不爽啊View Code 1 program sgu..
阅读全文

浙公网安备 33010602011771号