重庆师范大学第一届ACM选拔赛(公开赛)I:炎炎消防队

炎炎消防队

https://ac.nowcoder.com/acm/contest/6840/I

I:炎炎消防队
题目描述:
夏天的重庆格外地炎热,很容易起火。消防士们都全副武装,一旦发生险情就立马赶往救火。森罗是消防队中的一员,他在灭火的过程中突发奇想,如果能用退火的原理求解函数求最小值,那不就可以很容易计算了吗?
翌日,森罗来到即将高考的弟弟家辅导功课,其中一道题目是这样的函数
图片说明

给定任意一个实数y,让你求出函数的最小值。森罗回想起昨天的突发奇想,很快就给出了这个题目的解。那么,你知道他是怎么解决的吗?

一看出题人就是老二次元了(所以这题和消防队有啥关系吗?),退火算法是一个非常优秀、非常……(省略1000个字),但是!!!我不会,听都没听说过。。。(真·菜鸡)

所以————暴力三分,如果1/3处的值比2/3处的值大那left移动到1/3的位置,min所在的区间必然在剩下的(1/3,1)内,否则right移动到2/3处,min所在区间必然在剩下的(0,2/3)内,一路细分下去,直到答案够精确。
没写过三分的我,等分算错了,改半天才好好尴尬啊。
AC代码如下:

#include <bits/stdc++.h>
using namespace std;
long long T;
double ri,le,ml,mr,y;
double f(double x){
    return 7*pow(x,7)+6*pow(x,6)+2*pow(x,3)+8*x*x-y*x;
}
int main(){
    cin>>T;
    while(T--){
        cin>>y;
        ri=100;le=0;
        while(ri-le>=0.00001){
            ml=(ri-le)/3+le;
            mr=(ri-le)/3*2+le;
            if(f(ml)<f(mr)) ri=mr;
            else le=ml;
        }
        printf("%.4lf\n",f(ml));
    }
    return 0;
}
全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务