CSES - E4590 2016 5 - Results
Submission details
Task:Forest
Sender:HopeICanCode
Submission time:2016-10-15 14:37:23 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#10.05 sdetails
#2ACCEPTED0.70 sdetails
#3ACCEPTED0.72 sdetails
#4ACCEPTED0.67 sdetails
#5ACCEPTED0.67 sdetails
#6ACCEPTED0.72 sdetails
#7ACCEPTED0.66 sdetails
#8ACCEPTED0.69 sdetails
#9ACCEPTED0.68 sdetails
#10ACCEPTED0.72 sdetails
#11ACCEPTED0.68 sdetails
#120.80 sdetails
#130.77 sdetails
#140.74 sdetails
#150.75 sdetails
#160.80 sdetails
#170.73 sdetails
#180.77 sdetails
#190.76 sdetails
#200.77 sdetails
#210.39 sdetails
#220.16 sdetails
#230.08 sdetails
#240.09 sdetails
#250.12 sdetails
#260.09 sdetails
#270.08 sdetails
#280.10 sdetails
#29ACCEPTED0.10 sdetails
#30ACCEPTED0.10 sdetails
#31ACCEPTED0.04 sdetails
#32ACCEPTED0.04 sdetails

Code

#include <bits/stdc++.h>
#define UNVISITED -1
#define BIGINT 1 << 25
#define _ ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0), cout.precision(15);
using namespace std;

typedef long long int64;
typedef pair<int, int> ii;

class Tree{
public:
    Tree(int p, int h, int left, int right){
        this->p = p;
        this->h = h;
        this->left = left;
        this->right = right;
    }

    int getP(){
        return p;
    }

    int getLeftRange(){
        return max(p - h, 0);
    }

    int getRightRange(){
        return p + h;
    }

    double getLeft(){
        return left / 100.0;
    }

    double getRight(){
        return right / 100.0;
    }

private:
    int p, h, left, right;
};

int main(){ _
    int n, m;   cin >> n >> m;
    vector<Tree> trees;
    for(int i = 0; i < n; ++i){
        int p, h, left, right;
        cin >> p >> h >> left >> right;
        trees.push_back(Tree(p, h, left, right));
        // cout << trees[i].getLeft() << endl;
    }

    vector< ii > mush;
    vector<int> mushP;
    vector<double> prob(m, 1.0);
    for(int i = 0; i < m; ++i){
        int p, val; cin >> p >> val;
        mushP.push_back(p);
        mush.push_back(ii(p, val));
    }
    sort(mush.begin(), mush.end());
    sort(mushP.begin(), mushP.end());
    mushP.push_back(BIGINT);

    for(int i = 0; i < n; ++i){
        int p = trees[i].getP();
        int leftRange = trees[i].getLeftRange();
        int rightRange = trees[i].getRightRange();
        double leftP = trees[i].getLeft();
        double rightP = trees[i].getRight();


        // cout << leftRange << " " << rightRange << endl;

        vector<int>::iterator low, up;
        low = lower_bound(mushP.begin(), mushP.end(), leftRange);
        up = upper_bound(mushP.begin(), mushP.end(), rightRange);
        int diffA = low - mushP.begin();
        int diffB = up - mushP.begin();

        // cout << (up == mushP.end()) << endl;

        // cout << diffA << "\t" << diffB << endl;
        for(int j = diffA; j < diffB; ++j){
            if(mush[j].first == p)  continue;
            else if(mush[j].first < p)  prob[j] *= (1.0 - leftP);
            else    prob[j] *= (1.0 - rightP);
        }
    }

    double total = 0;
    for(int i = 0; i < m; ++i){
        total += prob[i] * mush[i].second;
    }
    cout << total << endl;

    return 0;
}

Test details

Test 1

Verdict:

input
1 10000
-102082010 194749759 64 27
-169360811 358
359126034 730
-287313697 384
...

correct output
4609458.5100000035018

user output
4992884.75

Test 2

Verdict: ACCEPTED

input
100000 10000
0 1 88 2
0 1 63 28
0 1 52 43
0 1 17 55
...

correct output
4972578

user output
4972578

Test 3

Verdict: ACCEPTED

input
100000 10000
0 9 1 31
0 4 23 35
0 9 0 31
0 3 19 25
...

correct output
5087113

user output
5087113

Test 4

Verdict: ACCEPTED

input
100000 10000
0 4 34 37
0 8 63 19
0 92 8 51
0 34 48 23
...

correct output
5008738

user output
5008738

Test 5

Verdict: ACCEPTED

input
100000 10000
0 258 60 40
0 518 49 48
0 136 3 45
0 537 21 54
...

correct output
4973582

user output
4973582

Test 6

Verdict: ACCEPTED

input
100000 10000
0 8216 0 85
0 7923 2 10
0 7717 6 6
0 5850 11 56
...

correct output
4996873

user output
4996873

Test 7

Verdict: ACCEPTED

input
100000 10000
0 61439 52 13
0 31641 81 19
0 52991 24 73
0 74428 59 25
...

correct output
4981920

user output
4981920

Test 8

Verdict: ACCEPTED

input
100000 10000
0 588352 21 36
0 697995 49 32
0 743909 22 55
0 307377 26 33
...

correct output
4972641

user output
4972641

Test 9

Verdict: ACCEPTED

input
100000 10000
0 5653692 8 69
0 9357432 11 34
0 1050285 53 26
0 2776597 62 23
...

correct output
4972878

user output
4972878

Test 10

Verdict: ACCEPTED

input
100000 10000
0 17600178 5 21
0 99902608 43 31
0 88368971 1 65
0 71931544 29 1
...

correct output
5028303

user output
5028303

Test 11

Verdict: ACCEPTED

input
100000 10000
0 188985228 13 35
0 15802601 6 84
0 748803313 4 85
0 287562630 27 15
...

correct output
5003777

user output
5003777

Test 12

Verdict:

input
100000 10000
0 153546899 42 12
-1 389479397 79 7
0 853802244 69 31
0 870268645 23 47
...

correct output
0

user output
1660549

Test 13

Verdict:

input
100000 10000
1 982453016 66 21
9 715621763 7 3
-8 738921209 4 14
-1 867559303 19 68
...

correct output
0

user output
2379449

Test 14

Verdict:

input
100000 10000
-8 231075202 33 42
-64 539079444 47 40
-3 913277554 27 72
64 876390450 39 40
...

correct output
0

user output
2499352

Test 15

Verdict:

input
100000 10000
-822 640687527 23 10
-63 950992174 45 54
-326 556836776 3 42
476 660842352 25 46
...

correct output
0

user output
2520968

Test 16

Verdict:

input
100000 10000
7130 403956088 6 36
-126 45945666 6 26
547 342334298 81 15
3570 301443877 26 12
...

correct output
0

user output
2507953

Test 17

Verdict:

input
100000 10000
-79428 461497679 37 2
-42424 58244371 5 45
-29468 880365708 5 86
61735 295975187 38 29
...

correct output
0

user output
2541228

Test 18

Verdict:

input
100000 10000
208306 586056116 64 14
-284428 573846943 53 2
-291410 239961140 23 57
948909 246295319 79 17
...

correct output
0

user output
2483327

Test 19

Verdict:

input
100000 10000
9520619 407909315 20 34
4343857 436518415 12 73
2074712 319882284 38 35
8482234 982127039 2 77
...

correct output
0

user output
2484251

Test 20

Verdict:

input
100000 10000
-15539984 929303404 80 15
96892144 254449084 30 49
93514243 579711370 36 21
-48237130 818395027 44 25
...

correct output
0

user output
2480682

Test 21

Verdict:

input
100000 10000
855342311 491522208 29 7
881646558 966041363 67 20
89636039 486326665 83 7
-334997833 924006860 15 46
...

correct output
0

user output
2494528

Test 22

Verdict:

input
100000 10000
-244523365 24261145 4 71
905282537 99635911 38 46
328378018 12716414 48 22
-490263671 71879670 67 13
...

correct output
0

user output
2478279

Test 23

Verdict:

input
100000 10000
-309176321 7931344 44 11
670761661 4871588 16 77
-877291566 3991335 2 43
467750447 9956482 90 0
...

correct output
0

user output
2531136

Test 24

Verdict:

input
100000 10000
885376769 348428 8 66
-355427923 400403 22 24
-77457635 135948 1 80
-187549451 497296 41 49
...

correct output
0.18573908352633872187

user output
2528177.05031614

Test 25

Verdict:

input
100000 10000
-831679450 979 93 0
830009187 56718 28 49
411212346 88038 26 38
563910477 10089 37 14
...

correct output
928215.57279065309558

user output
2976547.22221126

Test 26

Verdict:

input
100000 10000
835756750 5979 28 12
-224114814 5606 58 26
454282261 6626 27 35
506622396 3092 35 40
...

correct output
4227165.671246830374

user output
4597015.15648183

Test 27

Verdict:

input
100000 10000
316659941 123 0 3
617314355 33 60 35
-827504504 535 17 78
-855931189 531 50 17
...

correct output
4913283.3702000044286

user output
4957185.8504

Test 28

Verdict:

input
100000 10000
76318568 33 28 6
117791067 46 10 1
-840649145 17 19 26
-72446718 32 38 1
...

correct output
4965081.359999999404

user output
4969997.12

Test 29

Verdict: ACCEPTED

input
100000 10000
-438062424 7 27 33
843193716 8 82 0
-516237151 5 31 10
-586574881 10 2 96
...

correct output
5032129.6899999994785

user output
5032178.76

Test 30

Verdict: ACCEPTED

input
100000 10000
96882823 1 20 58
-505818489 1 18 45
333830058 1 52 38
-857687471 1 34 5
...

correct output
5031672.2599999997765

user output
5031672.26

Test 31

Verdict: ACCEPTED

input
1 1
2 2 50 50
1 1

correct output
0.5

user output
0.5

Test 32

Verdict: ACCEPTED

input
2 1
2 2 50 50
4 2 50 50
3 1

correct output
0.25

user output
0.25