CSES - Putka Open 2015 – 1/6 - Results
Submission details
Task:Lähetit
Sender:Henrik Lievonen
Submission time:2015-07-19 22:11:56 +0300
Language:C++
Status:READY
Result:12
Feedback
groupverdictscore
#1ACCEPTED12
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.08 s1details
#2ACCEPTED0.09 s1details
#3ACCEPTED0.08 s1details
#4ACCEPTED0.09 s1details
#5ACCEPTED0.08 s1details
#60.09 s2details
#70.12 s2details
#80.22 s2details
#90.34 s2details
#10ACCEPTED0.41 s2details
#11--3details
#12--3details
#13--3details
#14--3details
#15--3details

Code

#include <iostream>
#include <bitset>

using namespace std;

typedef long long int ll;

template<ll N>
struct modnum {
    ll num;
    modnum(ll n) :num(n%N) {}

    modnum &operator+=(const modnum<N> &o) {
        num = (num + o.num) % N;
        return *this;
    }
    modnum &operator*=(const modnum<N> &o) {
        num = (num*o.num) % N;
        return *this;
    }
    modnum operator*(const modnum<N> &o) const {
        modnum<N> a = *this;
        a *= o;
        return a;
    }

    operator ll() const {
        return num;
    }
};
typedef modnum<1000000007> num;
//typedef ll num;

typedef bitset<100> BS;

num testlayer(int n, int k, int l, BS b) {
    if (k <= 0) {
        return 1;
    }
    if (l >= n) {
        return 0;
    }
    
    num r = testlayer(n, k, l + 1, b);

    for (int i = 0; i < 
         l / 2 * 2
         + (n + 1) % 2
         +1;
        i++) {
        if (!b.test(i)) {
            b.set(i);
            r += testlayer(n, k - 1, l + 1, b);
            b.reset(i);
        }
    }

    return r;
}

num testdiag(int n, int k) {
    BS b;
    return testlayer(n, k, 0, b);
}

num test(int n, int k) {
    num r = 0;

    for (int i = 0; i <= k; i++) {
        r += testdiag(n, i)*testdiag(n-1, k - i);
    }

    return r;
}

int main() {
    /*cout << "\t";
    for (int x = 1; x < 10; x++)
        cout << x << "\t";
    for (int y = 0; y < 10; y++) {
        cout << y << "|\t";
        for (int x = 1; x < 10; x++) {
            cout << testdiag(x, y) << "\t";
        }
        cout << "\n";
    }*/
    int n, k;
    cin >> n >> k;
    cout << test(n, k);
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
5 2

correct output
240

user output
240

Test 2

Group: 1

Verdict: ACCEPTED

input
5 4

correct output
2728

user output
2728

Test 3

Group: 1

Verdict: ACCEPTED

input
5 6

correct output
1960

user output
1960

Test 4

Group: 1

Verdict: ACCEPTED

input
5 8

correct output
32

user output
32

Test 5

Group: 1

Verdict: ACCEPTED

input
5 10

correct output
0

user output
0

Test 6

Group: 2

Verdict:

input
10 4

correct output
1809464

user output
1870488

Test 7

Group: 2

Verdict:

input
10 8

correct output
209594075

user output
398611547

Test 8

Group: 2

Verdict:

input
10 12

correct output
811277399

user output
134948425

Test 9

Group: 2

Verdict:

input
10 16

correct output
17275136

user output
18920192

Test 10

Group: 2

Verdict: ACCEPTED

input
10 20

correct output
0

user output
0

Test 11

Group: 3

Verdict:

input
100 40

correct output
126883191

user output
(empty)

Test 12

Group: 3

Verdict:

input
100 80

correct output
785497039

user output
(empty)

Test 13

Group: 3

Verdict:

input
100 120

correct output
324216296

user output
(empty)

Test 14

Group: 3

Verdict:

input
100 160

correct output
895190039

user output
(empty)

Test 15

Group: 3

Verdict:

input
100 200

correct output
0

user output
(empty)