随笔分类 - 数学分析
摘要:题意:给定一个正整数A,告知等比数列的公比为q,为这个序列能否超过一个特定的数K。解法:该题需要考虑公比的取值,当q=1,q=-1,q=0的特殊性,由于等比数列的增长速度非常快,所以可以for循环扫描过去。#include #include #include #include #include #include using namespace std;typedef long long LL;const int N = 10005;int n;int seq[N];int k1, k2;LL K;int main() { int T, ca = 0; scanf("%d",
阅读全文
摘要:题意:有n个球,其中有0、1、2...n个黑球的概率是相等的,现在从中取出L个球,p个黑球q个白球。现在问猜一个黑球的区间,使得落在这个区间的概率大于给定的一个数值。详见代码:#include #include #include #include #include using namespace std;int n, p, q, pri;/* n个球,取出p+q个球,其中黑球p个,白球q个,要求的概率最低值为p 设n个球中有k个黑球的事件为Ak ,设取出p+q个球中有p个黑球为事件B题目所有概率为sum{p(Ak|B)}>=pri的k的取值区间 p(Ak|B)不好求解,通过贝叶斯公式p(
阅读全文
摘要:题意:给定N个三维平面点,每个点都有一个高度,每两个点之间的需要构边,边的距离由x,y坐标的欧几里得距离确定,边的花费有点的高度差即z值确定,现在问一个合理的生成树中,花费比上距离的最小值为多少?解法:每一条边对应于一个高度差,设每条边的高度差为Hi,距离为Li,则要求找到一组边集满足,一如既往的,我们假设一个比例R使得有成立,那么对式子变形后有,得到这个式子后,我们就能够将边权进行修改,求一个最小生成树来判定是否满足<=0的要求。由于图是一个稠密图,所以kruskal算法超时了,改成prim后,priority_queue照样超时,最后改成最普通版的才Ac掉。代码如下:#include
阅读全文
摘要:题意:给定N个点,M条单向边,问在图中寻找一条回路,使得该路径上的所有点权和除以边权和最大。解法:设某点点权为ai, 边权为bi。选择某点的同时就意味着选择了某条边,那么我们把这条单向边划给弧头,因此可以得到表达式,s是牛选择的出发点。可以利用01分数规划的一般解法来求解,那就是选择某个比例进行合法性判定,如果这个比例能够达到,则把比例加大,如果不能的话,缩小这个比例,所以也叫做参数搜索,假设这个比例为R后,上式变为是否成立的判定问题。由于一个图中的某条回路小于0可以用spfa进行判定,那么我们就可以得到一个非常接近正确答案的值,只要精度够高,就能够保证得到的答案取两位后能够与等于0的参数R相
阅读全文
摘要:题意:给定一个N个不同的非负整数(每个数不大于10^6),1<=N<=5000,问找到一个最小的m使得N个数去掉最多x(0<=x<k)个数后能够使得N-x个数%m两两不同。解法:首先可以给定出一个暴力的方法,那就是枚举所有的m,从1开始,然后统计余数相同的数一共多出来多少个,很明显,当多出来的数大于k时则不满足情况,从小到大枚举m遇到第一个满足要求的返回即可。但是这样很显然会超时,时间复杂度为O(N*10^6),这里有一个优化如下:统计出所有的两两组合差值的情况,如有两个数x,y如果x % m = y %m,那么(x - y) % m = 0,统计差值将在后面的计算中发
阅读全文
摘要:题意:给定一个n*n的矩形框,也就是限制在一个(0,0)到(n,m)的平面区域内,求出一个最大的矩形,该矩形面积要求最大,且长和宽的比要为a/b,并且该矩形需包含一个限制区域内的一个点,该矩形的中心应该离这个点越近越好。输出左下角和右上角的坐标。如果在满足所有要求的情况相同近的话输出坐标字典序最小的一种情况。解法:初读起来,这题的限制条件颇多,做的过程中确实有许多地方需要注意,那么我们来一步步解决这个问题:1.首先假设这个矩形的的长(投影到x轴上的量)为sl, 宽为sw(投影到y轴上的量)。那么依据题意有sl / sw = a / b。将方程变形有b*sl - a*sw = 0的形式,可以用一
阅读全文
摘要:题意:比赛的时候想了各种的贪心方案,最后还是没有把这题搞出来......废话不多说,题目给定了一条条给定了顺序的路径,这些路径是后面要一一走过的,每条路径有一个长度,单位长度消耗汽油的量以及该条公路上加油站的汽油单价。告诉你路径条数N,油箱容积K,问如何安排加油是的行走完所有路径的花费最少。解法:该题有一个很巧妙的解法就是每到一个油站都加满油箱,队列里面保留了走过前面路径后保留的最便宜的油,每次从队列中取出最便宜的油行进这一段路程。在维持一个汽油价格单调递增时,具体过程如下:1.当队尾不为空时,每次从队尾向前遍历,如果元素单价高于当前路线加油站的汽油单价,替换之,知道遇到价格比其低的汽油或者队
阅读全文
摘要:题意:给定N个点,M条边,每个点为0或者为1,每条边有一个权值。接下来有Q组操作,要么翻转某个点的标号,要么询问某组边的权值一共为多少,总共有三种类型的边:端点分别为(0, 0), (0, 1), (1, 1)。解法:这题的一个蛮力的解法就是记录好每一点的标号,然后O(1)的时间修改编号,对于每次查询就遍历所有的边进行询问。这样的话时间复杂度就是O(q*m)了,显然无法接受。换个好点的,我们首先通过原始数据在输入的时候处理一下,保留好每条边所属的类型。那么在没有点进行修改的话,O(1)时间进行输出。问题就是如果要进行修改的话,一个合理的方式就是修改当前节点所连的边的属性,因为其他于该节点无关的
阅读全文
摘要:题意:给定一个数N(1<=N<=10000),求N的一个最小的倍数能够被N整除。解法:粗看起来题意简单,但是确无从下手,其实正确的解法就是通过搜索来搞定,由于N不太,因此N的余数类也不会很大,采用从小到大的枚举策略能够使得后面达到的同余类状态不及前面的优秀,这样就能够在非常短的时间内找到答案。bfs过程中对于在状态与状态之间建立前驱指针,这样就能够输出最后的结果。一个状态需要记录以下值:1.当前状态对N的余数;2.当前放置的数字;3.前驱指针。状态之间的转移:mod' = (mod*10 + digit) % N从1位开始依次枚举,然后扩大到2位,3位.....代码如下:#
阅读全文
摘要:题意:给定一个数x,现在定义f(x)是a*b|x的情况下,a,b的组合情况有多少种。现在给定一个数N求f(1)+f(2)+...+f(N)。解法:一开始想到了a*b是x的约数,因此推出了f(x)的公式,也就是这个公式,使得我们在求前缀和的道路上寸步难行......正确的解法是对于任意一个a*b|c可以视为a*b*c = x,那么就把前缀和问题转化为a*b*c <= x的解的组合个数问题了。三个数a,b,c先暂时不考虑其位置关系带来的不同,规定a<=b<=c,那么分情况讨论:1.当a=b=c时有一种排列情况2.当a=b<c时有三种排列情况3.当a<b=c时有三种排列
阅读全文