Flowers 三分

                      Flowers

题目抽象:给你一些数据,给你公式(不是简单公式),求最小值。

分析:公式都给出了,又是求最值,很自然的想法是二分,或者三分。这题显然不是二分。那么就是三分了。已水量为变量,那么化肥的量的最小值就可以求出。比赛的时候虽然不能证明该函数为吐函数,但是很容易猜想到是三分。

 1 /********************************
 2 please don‘t hack me!! /(ToT)/~~
 3                 __------__
 4               /~          ~ 5              |    //^\\//^\|
 6            /~~\  ||  T| |T|:~ 7           | |6   ||___|_|_||:|
 8            \__.  /      o  \/‘
 9             |   (       O   )
10    /~~~~\    `\  \         /
11   | |~~\ |     )  ~------~`12  /‘ |  | |   /     ____ /~~~)13 (_/‘   | | |     /‘    |    ( |
14        | | |     \    /   __)/ 15        \  \ \      \/    /‘ \   `16          \  \|\        /   | |\___|
17            \ |  \____/     | |
18            /^~>  \        _/ <
19           |  |         \       20           |  | \        \        21           -^-\  \       |        )
22                `\_______/^\______/
23 ************************************/
24
25 #include <iostream>
26 #include <cstdio>
27 #include <cstring>
28 #include <cmath>
29 #include <algorithm>
30 #include <string>
31 #include <vector>
32 #include <set>
33 #include <map>
34 #include <queue>
35 #include <stack>
36 #include <cstdlib>
37 #include <sstream>
38 using namespace std;
39 typedef long long LL;
40 const LL INF = 0x5fffffff;
41 const double EXP = 1E-8;
42 const LL MOD = (LL)1E9+7;
43 const int MS = 100005;
44
45 struct node {
46     double vw,pf,vf,th;
47 }nodes[MS];
48
49 int main() {
50     int T, N;
51     double pw;
52     while (scanf("%d",&N) == 1) {
53         if (N == 0)
54             break;
55         scanf("%lf",&pw);
56         for (int i = 0; i < N; i++) {
57             scanf("%lf%lf%lf%lf",&nodes[i].vw,&nodes[i].pf,&nodes[i].vf,&nodes[i].th);
58         }
59         double l = 0;            //枚举水量
60         double r = 101;
61         double sum1, sum2;
62         // 用三分的次数代替浮点数的比较。
63         for (int time = 1; time < 200; time++) {
64             double mid = l + (r - l) / 3;
65             double mmid = r - (r - l) / 3;
66             sum1 = mid * pw;
67             sum2 = mmid * pw;
68             for (int i = 0; i< N;i++) {
69                 double t = nodes[i].th - mid * nodes[i].vw;
70                 if(t <= 0)
71                     continue;
72                 sum1 +=  t / nodes[i].vf * nodes[i].pf;
73             }
74             for (int i = 0; i< N;i++) {
75                 double t = nodes[i].th - mmid * nodes[i].vw;
76                 if(t <= 0)
77                     continue;
78                 sum2 +=  t / nodes[i].vf * nodes[i].pf;
79             }
80             if (sum1 > sum2)
81                 l = mid;
82             else
83                 r = mmid;
84         }
85         printf("%.5lf\n",sum1);
86     }
87     return 0;
88 }
时间: 2024-10-08 04:20:08

Flowers 三分的相关文章

三分 - HNU 13409 Flowers

Flowers Problem's Link: http://acm.hnu.cn/online/?action=problem&type=show&id=13409&courseid=0 Mean: 有N颗种子,每颗种子初始时营养值为0.当一颗种子营养值达到th后就会开花. 有两种操作: 1.给所有的种子浇w升水: 2.给某个种子施f升肥: 对于第i颗种子,每浇1升水会增加vw点营养值,每施1升肥可以增加vf点营养值,该种种子的肥料单价为pf,当营养值达到th后开花. 浇水必须一

hdu 4717 The Moving Points(三分)

题目链接:hdu 4717 The Moving Points 题意: 在二维平面上有n个点,每个点给出移动的方向和速度. 问在某个时刻,这些点中最大距离最小是多少,输出时刻和距离. 题解: 我们可以知道,每个点对的距离要么是单调递增,要么是有一个峰的函数. 举例画一下可知道合成的这个函数最多只有一个峰,所以可以用三分求解. 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespa

三分算法

三分算法 二分算法解决的是具有单调性的问题. 三分算法解决的是抛物线的类型,上凸,下凹. mid=(Left+Right)/2; midmid=(Right+mid)/2; 题目类型有: HDU :3400  2298  4454  2438  3756 POJ:  3301   3737 ZOJ: 3203

Flowers(二分水过。。。)

Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2579    Accepted Submission(s): 1265 Problem Description As is known to all, the blooming time and duration varies between different kinds

uvalive 4986(三分查找)

题意:空间内有n个点,求一个最小体积的圆锥把所有点包进去.输出圆锥的高和底面半径.圆锥的底面圆心在(0,0),所有点的z坐标都大于等于0. 题解:因为圆锥体积是 V = 1/3 * π * r^2 * h ,这是一个二次函数,也就是个凸性函数,可以用三分查找的方式枚举两个高,然后找到对应的最小的r,比对两个高得到的体积继续三分查找. #include <cstdio> #include <cstring> #include <algorithm> #include &l

Toxophily-数论以及二分三分

G - Toxophily Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2298 Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bridge, toxophily, deluxe ballroom

BNUOJ 1038 Flowers(BFS)

Flowers Time Limit: 1000ms Memory Limit: 65535KB 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next 春天到了,师大的园丁们又开始忙碌起来了. 京师广场上有一块空地,边界围成了一个多边形,内部被划分成一格一格的.园丁们想在这个多边形内的每一格内种植一些花. 现在请你帮忙计算一下一共最多可以种多少花.

三分 --- CSU 1548: Design road

Design road Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1548 Mean: 目的:从(0,0)到达(x,y).但是在0~x之间有n条平行于y轴的河,每条河位于xi处,无限长,wi宽,并分别给出了建立路和桥每公里的单价 求:到达目标的最小费用. analyse: 比赛的时候一直没想到思路,第二个样列怎么算都算不对,赛后才知道是三分. 首先把所有的桥移到最右端,然后三分枚举路和河的交点. Time

csu 1548: Design road (三分)

题意:需要从(0,0) 点 到(x,y) 修一段路 其中有n条和y轴平行的河 修路的单位成本c1 修桥的单位成本c2 问最小总成本为多少 思路:把所有河合并 再三分桥的长度 求出最小成本 #include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<stdlib.h> #include<algorithm> #include<queu