摘要:
题意: 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50,个数不超过65。 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。 给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度。 思路:搜索+减枝。 至于复杂度,很难计算,反正疯狂 阅读全文
摘要:
之前用VS,先是完成了GLUT库下的opengl使用; 然后得知GLUT有些过时,又按照教程接触了GLFW库下,反正对我来说是有些复杂。 今天正式试一试用VS来写ACM的题目,发现不能定义string? 一直改,才发现头文件应该是<string>而不是<cstring>; 那么如果我想用<bits/ 阅读全文
摘要:
#include <gl/glut.h> //正方形的位置和大小 GLfloat x1 = 100.0f; GLfloat y1 = 150.0f; GLsizei rsize = 50; //正方形运动变化的步长 GLfloat xstep = 1.0f; GLfloat ystep = 1.0f 阅读全文
摘要:
pro:有一个长度为N的数组a[i],要求选择k[i]>0,使得b[i]=a[i]^k[i]%M中出现的不同数最多。N<=200, M<=1e9; sol:a^x%p的个数的有限的,但是全部求出来再二分匹配显然是不可取的。 但是考虑到二分匹配的特殊性,对于每个a[],最多求min(N,全部)个即可满 阅读全文
摘要:
pro:给定N个数的数组a[],其中一个数X的出现次数大于N/2,求X,空间很小。 sol:不能用保存数组,考虑其他做法。 由于出现次数较多,我们维护一个栈,栈中的数字相同,所以我们记录栈的元素和个数即可,如果新加入一个数与栈中数不同,则弹出一个元素(tot--),否则加入,最后保留在栈中的就是答案 阅读全文
摘要:
题意:给定N个点,Q次询问,问当前点知否在N个点组成的凸包内。 思路:由于是凸包,我们可以利用二分求解。 二分思路1:求得上凸包和下凸包,那么两次二分,如果点在对应上凸包的下面,对应下凸包的上面,那么在凸包内。 二分思路2:求得凸包(N),划分为N-2个三角形,二分求得对应位置,验证是否在三角形内。 阅读全文
摘要:
pro:N个数排成一圈。一次操作为,每个位置的数+=L*左+R*右,保留x为整数。 问S轮操作后每个位置的值。 N<=1000,S<=2^30,x<=9 。 sol:不难想到矩阵乘法,但是N为1000,显然普通的N^3矩阵乘法的复杂度不能AC。 不难发现这是经典的循环矩阵(第二行为第一行右移一格.. 阅读全文
摘要:
pro:给定一个N边形,然后给半径为R的圆,问是否可以放进去。 问题转化为多边形的最大内接圆半径。(N<50); sol:乍一看,不就是二分+半平面交验证是否有核的板子题吗。 然而事情并没有那么简单。 因为我们的多边形可能是凹多边形,而前面的方法只对凸多边形有效。 学习了下模拟退火的算法,这个随机算 阅读全文
摘要:
pro:给定平面上N条直线,保证没有直线和Y轴平行。 求有多少交点的X坐标落在(L,R)开区间之间,注意在x=L或者R处的不算。 sol:求出每条直线与L和R的交点,如果A直线和B直线在(L,R)相交,一定有Xa<Xb而且Ya>Yb(或相反);那么即是求逆序对。 阅读全文
摘要:
pro: 给出一个n*m的地图,刚开始人在(x,y),每次给出一段区间(l,r,t),表示在时间[l,r]内,可以使人向4个方向(t)移动一格,或者不动。求最大可以移动多少格。 sol: 考虑每一列(上下移)或者一行(左右移)的情况。以右移为例,我们可以很快列出dp方程:f[x][y][i]=max 阅读全文