Submission details
Task:Grid Paths II
Sender:niketin
Submission time:2020-09-19 22:01:10 +0300
Language:C++ (C++17)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6--details
#7--details
#8--details
#9--details
#10--details

Code

#include <iostream>
#include <algorithm>
#include <string>
#include <bits/stdc++.h>
#define N 1000
using namespace std;
using llu = long long unsigned;
map<pair<llu, llu>, llu> m;
map<pair<llu, llu>, llu> traps;



llu g(llu xi, llu yi, llu n) {
    m[make_pair(n,n)] = 1;
    llu r=2*n;

    for (llu i = r; i > 1; i--) {
        for (llu x = i-1; x > 0; x--) {
            if (1>x or x > n)
                continue;
            llu y = i - x;
            if (1>y or y > n)
                continue;
            if (x == n and y == n)
                continue;

            if (traps.find(make_pair(x, y)) != traps.end()){
                m[make_pair(x, y)] = 0;
                continue;
            }

            llu a=0;
            llu b=0;
            if (m.find(make_pair(x+1, y)) == m.end()) {
                a=0;
            }else {
                a = m[make_pair(x+1,y)];
            }

            if (m.find(make_pair(x, y+1)) == m.end()) {
                b=0;
            }else {
                b= m[make_pair(x,y+1)];
            }

            m[make_pair(x, y)] = (a+b) % (1000000000 + 7);
        }
    }

    return m[make_pair(1,1)];

}


int main()
{
    llu n, traplen;

    cin >> n >> traplen;

    for (llu i = 0; i < traplen; i++ ) {
        llu a, b;
        cin >> a >> b;
        traps[make_pair(a,b)] = 1;
    }
    llu result = g(1, 1, n);
    cout << result << endl;
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
100 1000
41 11
11 24
51 72
47 31
...

correct output
342758070

user output
342758070

Test 2

Verdict: ACCEPTED

input
100 1000
83 37
24 1
52 42
86 36
...

correct output
919249325

user output
919249325

Test 3

Verdict: ACCEPTED

input
100 1000
99 28
16 31
92 41
39 65
...

correct output
12649242

user output
12649242

Test 4

Verdict: ACCEPTED

input
100 1000
5 47
32 1
27 70
86 39
...

correct output
466313473

user output
466313473

Test 5

Verdict: ACCEPTED

input
100 1000
14 28
63 16
15 54
68 18
...

correct output
525088588

user output
525088588

Test 6

Verdict:

input
1000000 1000
332974 646000
669874 23872
662362 92533
670177 367382
...

correct output
476425733

user output
(empty)

Test 7

Verdict:

input
1000000 1000
474616 793877
452016 207512
940198 719201
162471 997296
...

correct output
757933231

user output
(empty)

Test 8

Verdict:

input
1000000 1000
125814 37785
523915 416397
246681 345297
635386 245404
...

correct output
672607703

user output
(empty)

Test 9

Verdict:

input
1000000 1000
468197 471455
970002 408761
420246 765021
8126 930827
...

correct output
138494458

user output
(empty)

Test 10

Verdict:

input
1000000 1000
837278 905086
893778 245584
867013 721507
404988 868333
...

correct output
796948966

user output
(empty)