wordpress网站使用教程湖南金科建设有限公司网站
news/
2025/9/23 2:03:33/
文章来源:
wordpress网站使用教程,湖南金科建设有限公司网站,网站维护中页面设计,视频网站dedecmsP2571 [SCOI2010]传送带
题意#xff1a;
你要从 A 点到 D 点。有两条传送带#xff1a;第一条从 A 到 B#xff0c;速度为 pp#xff0c;第二条从 C 到 D#xff0c;速度为 q。不走传送带时速度为 r。求从 A 到 D 的最少时间。
题解#xff1a;
很明显#xff0c;答…P2571 [SCOI2010]传送带
题意
你要从 A 点到 D 点。有两条传送带第一条从 A 到 B速度为 pp第二条从 C 到 D速度为 q。不走传送带时速度为 r。求从 A 到 D 的最少时间。
题解
很明显答案路径是由AEEFFD组成的E在AB上F在CD上。 答案就是dis(A,E)/pdis(E,F)/rdis(F,D)/q 这是一个二元函数E和F都是未知的 我们可以假设E已知此时就是找一个F让f(E)dis(E,F)/rdis(F,D)/q最小会发现这是一个单峰函数也就是f(E)可以通过三分F得到最小值而E也是未知量我们还要取dis(A,E)/pf(E)的最小值我们发现这还是一个单峰函数三分寻找E就是答案 总结三分套三分 怎么看出这个是单峰函数我们一开始是将E和F一个固定比如单看F然后设F在CD上的比例然后列出式子感觉像单峰函数
模拟退火也可以做。。我还不会
代码
三分模板要记熟
#includebits/stdc.h
#define debug(a,b) printf(%s %d\n,a,b);
using namespace std;
typedef long long ll;
typedef pairint, int PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll1e18;
const int INF_int0x3f3f3f3f;
inline ll read(){ll s0,w1ll;char chgetchar();while(ch0||ch9){if(ch-)w-1ll;chgetchar();}while(ch0ch9) ss*10ll((ch-0)*1ll),chgetchar();//s(s3)(s1)(ch^48);return s*w;
}
void rd_test(){#ifdef ONLINE_JUDGE#elsestartTime clock(); //计时开始freopen(2571.in,r,stdin);#endif
}
void Time_test(){#ifdef ONLINE_JUDGE#elseendTime clock(); //计时结束printf(\n运行时间为:%lfs\n,(double)(endTime - startTime) / CLOCKS_PER_SEC);#endif
}
double Ax,Ay,Bx,By,Cx,Cy,Dx,Dy;
double P,Q,R;
const double eps1e-9;
double get(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)(y1-y2)*(y1-y2));
}
double Time(double x1,double y1,double x2,double y2){double t2get(x1,y1,x2,y2)/R;double t3get(x2,y2,Dx,Dy)/Q;return t2t3;
}
double work(double x,double y){double t1get(Ax,Ay,x,y)/P;//第一段double lxCx,lyCy,rxDx,ryDy;while(get(lx,ly,rx,ry)eps){double lmidxlx(rx-lx)/3.0;double lmidyly(ry-ly)/3.0;double rmidxrx-(rx-lx)/3.0;double rmidyry-(ry-ly)/3.0;double ans1Time(x,y,lmidx,lmidy);double ans2Time(x,y,rmidx,rmidy); if(ans2-ans1eps){rxrmidx;ryrmidy;}else {lxlmidx;lylmidy;}}return t1Time(x,y,lx,ly);
}
int main()
{//rd_test();cinAxAyBxBy;cinCxCyDxDy;cinPQR; double lx,ly,rx,ry;lxAx,lyAy;rxBx,ryBy;while(get(lx,ly,rx,ry)eps){double lmidxlx(rx-lx)/3.0;double lmidyly(ry-ly)/3.0;double rmidxrx-(rx-lx)/3.0;double rmidyry-(ry-ly)/3.0;double ans1work(lmidx,lmidy);double ans2work(rmidx,rmidy); if(ans2-ans1eps){rxrmidx;ryrmidy;}else {lxlmidx;lylmidy;}}printf(%.2lf\n,work(lx,ly));return 0;//Time_test();
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911067.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!