题意: 已知两点 (x1,y1) 和 (x2, y2)求两点间线段上的整点的个数 解析: 就是求gcd(abs(x2- x1),abs(y2 - y1)) 证明: 我们分水平方向和竖直方向两个方向看   这些在线段上的整点的横纵坐标一定可以平分 x2-x1  和  y2-y1 这两条线段 即需要求这两条线段的最大公约数  使得点最多 代码转自:https://blog.csdn.net/xiang_6/article/details/78523634   懒得写了 #include<iostre…
题目:http://www.lightoj.com/volume_showproblem.php?problem=1077 题意:在平面上, 给出两个点的坐标 例如:(x, y) 其中x, y 都是整数. 求: 以这两个点为端点的线段上一共有几个整数点(即:横纵坐标皆为整数). 解法: 求出|x1 - x2| 和 |y1-y2| 的最大公约数 再加上1 即可! 是不是很奇妙, 不可思议的奇妙, 为何如此的巧合呢? 然而就是如此的巧合!!!. 提示: 把线段看做向量, 把一个端点移到原点. 式子中…
http://hihocoder.com/problemset/problem/1077 #include <bits/stdc++.h> using namespace std; #define ll long long #define co(x) cout << (x) << endl #define ci(x) cin >> (x) #define sd(x) scanf("%d",&x) #define sf(x) sca…
题解引自:http://www.cnblogs.com/wuyiqi/archive/2012/05/27/2520642.html 题意: 有n个数,刚开始都为0 add i , j 给i,j区间内的数都加1 Q i  j   询问i.j间能被三整除的数的个数 分析: 线段树记录三个域 对三取余为0的数的个数 .....1...... .....2...... 可以保存在一个数组里面 考虑到每次给一个区间加1的时候,区间内对3取余为1的数的个数变成了对三取余为2,2的变成了0,0的变成了1 所…
题目链接: huangjing 题意:给了三种操作 1:add(x,y)将这个点增加二维坐标系 2:remove(x,y)将这个点从二维坐标系移除. 3:find(x,y)就是找到在(x,y)右上方的第一个点. 思路:我们能够建立n个set以x为横坐标,那么我们这个题就转化为找一个最小的x是否存在满足条件,那么x一旦被找到.那么纵坐标就自然而然的找到了.当然更新操作就是对maxy的维护,然后查询操作就是找出一个最小的x.. 还有由于n很大,所以要採用离散化的方法.然后进行离线处理.还是就是掌握s…
题意:https://ac.nowcoder.com/acm/contest/881/I 给你n个平面上的点,每个点有a.b两个权值,现在让你划分成两个区域(要求所有A集合里的点不能在任何B集合里的点的右下方). 求MAX(Sigma ai+Sigma bi). 思路: dp+线段树. https://blog.csdn.net/qq_41194925/article/details/97079075 就是有一个要注意的地方:对于枚举的点我们算的是B集合所以dp[i]=max(1~i)+bi,这…
给你n个点,第i个点在的位置为(xi,yi),有两个属性值(ai,bi).现在让你把这n个点划分为A和B两个部分,使得最后不存在i∈A和j∈B,使得xi>=xj且yi<=yj.然后对于所有的划分方法,找到并输出最大和 现在的疑问点在于为什么要多加一个高度为0的虚拟节点(因为要考虑全是A集合的) #include <bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const…
题目链接:http://lightoj.com/volume_showproblem.php?problem=1024 题意:给你n(2<=n<=1000)个数, 然后求n个数的最小公倍数,每个数的大小是1---10000;所以答案会很大,可能达到1000个4位数相乘:所以结果很大,将近4000位; 所以一定会涉及到高精度运算:同时我们也不能直接循环求最小公倍数:我们可以把一个数分解成多个质数相乘,然后找到所有数中,出现的质数最多的那个对应的次方,然后再把结果乘起来即可; 例如样例 4 5 6…
题意: 给出一个N 求N有多少个别的进制的数有后导零 解析: 对于一个别的进制的数要转化为10进制 (我们暂且只分析二进制就好啦) An * 2^(n-1) + An-1 * 2^(n-2) + ``````+ A1 * 2^1  +  A0 * 2^0  = N 因为有后导零 我们暂且只看有一个后导零的情况  即A0 = 0 那么  2 * ( An * 2^(n-2) + An01 * 2^(n-3) + `````` + A1) = N 即  An * 2^(n-2) + An-1 * 2…
M*N的方格矩阵,一个人在左下角格子的中心,除他所站位置外,其他格子的中心都有一个敌人,他一次可发射一枚子弹干掉一条直线上的所有敌人,问至少要发射多少子弹才能干掉所有敌人. Input 输入2个数m, n,中间用空格分隔,对应矩阵的大小.(1 <= m,n <= 5 * 10^6) Output 输出发射子弹的数量.首先,我们知道有一个结论,从坐标(0,0)到整点(x,y)连一条线段,经过的整点个数有gcd(x,y)+1个,包括(0,0)和(x,y)这2个.对于每一个坐标(x,y),我们需要考…