View difference between Paste ID: Z8V0avnG and PPvxKUqm
SHOW: | | - or go back to the newest paste.
1
#include<iostream>
2
#include<map>
3
#include<vector>
4
#include<stack>
5
#include<algorithm>
6
#include<cmath>
7
#include<set>
8
#include<iomanip>
9
#include<fstream>
10
11
using namespace std;
12
13
ifstream in("frog.in");
14
ofstream out("frog.out");
15
16
bool check(vector<pair<long long, long long>> &v, long long w, long long h, long double k) {
17-
    int n;
17+
    long double x = 0;
18-
    in >> n;
18+
    long double y = 0;
19-
    vector<int> v(n);
19+
    long double wi = 0, hi = 0;
20-
    for(int i = 0; i < n; i++) {
20+
    long long prev_h = -1;
21-
        in >> v[i];
21+
    int last = -1;
22
    
23-
    long long energy = 0;
23+
    for(int i = 0; i < v.size(); i++) {
24-
    int shift = 0;
24+
        wi = v[i].first * k;
25-
    int prev_shift = 0;
25+
        hi = v[i].second * k;
26-
    int prev = -1;
26+
        if(prev_h == v[i].second) {
27-
    int p = n - 1;
27+
            if(x + wi <= w)
28-
    while(p >= 0) {
28+
                x += wi;
29-
        if(v[p] != prev)
29+
            else {
30-
            energy += max(v[p] - shift, 0);
30+
                x = 0;
31
                y += hi;
32-
            energy += max(v[p] - prev_shift, 0);
32+
            }
33
            last = 1;
34-
        prev_shift = shift;
34+
        }
35-
        shift++;
35+
        else {
36-
        prev = v[p];
36+
            x = wi;
37-
        p--;
37+
            y += hi;
38
            last = 2;
39
        }
40-
    out << energy << endl;
40+
41
        prev_h = v[i].second;
42
    }
43
    
44
    return x <= w && y <= h;
45
}
46
47
int main() {
48
    long long n, w, h;
49
    cin >> n >> w >> h;
50
    
51
    vector<pair<long long, long long>> v(n);
52
    for(int i = 0; i < n; i++)
53
        cin >> v[i].first >> v[i].second;
54
    
55
    long double l = 0, r = 1e9;
56
    for(int k = 0; k < 100; k++) {
57
        long double m = (l + r) / 2.0;
58
        
59
        if(check(v, w, h, m))
60
            l = m;
61
        else
62
            r = m;
63
    }
64
    
65
    cout.precision(100);
66
    cout << l << endl;
67
    
68
    return 0;
69
}