随笔分类 - ACM_搜索
摘要:题目地址:http://poj.org/problem?id=3984利用图论中深搜的思想,存在边就是x,y -> x+1,y 还有x,y -> x,y+1 然后仍然是访问未访问的而且不是墙壁的地方。 这样保证不走已经搜索过,走不通的路。唯一一种需要重复访问已经访问的结点的情况是已经无路可走了,只能返回,这样就在栈中将路径取出来,把自己现在的那个先pop掉,然后实现回溯。最后用向量实现栈的自底输出。代码:IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time12143517814jingqi3984Accepted72
阅读全文
摘要:题目地址:http://poj.org/problem?id=1905思路:列出方程 2*R*x=L‘ 2*R*sin(x)=L 两式相除即得 x/sin(x) = 1+n*c 前提x!=0 就是 n*c>0 答案就是 L/2* (1/sin(x)-1/tan(x)) 三角函数化简为 L/2*tan(x/2) x 在0~ PI/2 于是关于x是单增的, 反函数也是单增的,x/sin(x) 也是单增的一开始的思路是先用 二分把x/sin(x) = 1+n*c 里面的x解出来,然后带进L/2*tan(x/2) 计算 虽然样例过了,但是还是wa...
阅读全文
摘要:题目地址:http://poj.org/problem?id=3122还是找到了单调函数--分给m人对最大尺寸f(m) 是m的不增函数,那么具体给定m是,二分f(m)使用>=f+1 l=mid 而不是>来保证尽可能取得大细节: 应该直接二分答案,而不是算出比较精确的半径平方,最后*PI输出,会产生误差,然后PI用arccos(-1),否则也会wa代码:#include
#include
#include
using namespace std;
//const double PI=3.1415926535; //这样写就wa了 是精度不够?
const double PI=acos
阅读全文
摘要:题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366思路: 题目就是要求函数(h*D-H*x)/(D-x)+x 的最大值,其中 x>=0 x
#include
using namespace std; int main()
{ int T; cin>>T; long double H,h,D; while(T--) { cin>>H>>h>>D; long double ans=D*H-D*h; ans=sqrt(ans); ans...
阅读全文
摘要:题目地址:http://poj.org/problem?id=3258题目思路: 首先,如果只减少一部,那么一定要干掉最短的那段距离(一旦不消灭,最小的还是它,并没有达到使最小值取最大的理想情况)。 但是如果有很多边取到最小,具体去除哪一个点就有点麻烦了。如果两个最小距离连着,去除公共点最好。 如果没有连着,四个点分别考虑紧邻的,取最小的。 如果多于两条线段取最小随便去,如果仅有一条取最小仍是去紧邻较小的点。 很麻烦就是了。基于这样的思想,每次去掉一个顶点后,再取出最小边,同样处理(借助优先权队列) 。不知这样的贪心是不是对的...有一个二分答案的做法,现学的.一般的二分查找是 while(.
阅读全文
浙公网安备 33010602011771号