CSES - Putka Open 2020 – 1/5 - Results
Submission details
Task:Ruudukko
Sender:tsiki2
Submission time:2020-09-06 21:03:55 +0300
Language:C++ (C++11)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED16
#2ACCEPTED30
#3ACCEPTED54
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3details
#2ACCEPTED0.01 s1, 2, 3details
#3ACCEPTED0.01 s1, 2, 3details
#4ACCEPTED0.01 s1, 2, 3details
#5ACCEPTED0.01 s1, 2, 3details
#6ACCEPTED0.01 s1, 2, 3details
#7ACCEPTED0.01 s2, 3details
#8ACCEPTED0.01 s2, 3details
#9ACCEPTED0.01 s2, 3details
#10ACCEPTED0.01 s2, 3details
#11ACCEPTED0.01 s2, 3details
#12ACCEPTED0.01 s2, 3details
#13ACCEPTED0.47 s3details
#14ACCEPTED0.49 s3details
#15ACCEPTED0.51 s3details
#16ACCEPTED0.54 s3details
#17ACCEPTED0.55 s3details
#18ACCEPTED0.56 s3details

Code

#include <stdio.h> // include before iostream for faster scanf
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <utility>
#include <set>
#include <unordered_set>
#include <cmath>
#include <math.h>
#include <queue>
#include <stdlib.h>
#include <string.h>
#include <sstream>
#include <tuple>
#include <utility>
#include <iomanip>
#include <iterator>
#include <bitset>

using namespace std;
typedef long long LL;

#define printv(printVec) for (auto printVecIter : (printVec)) cout << printVecIter << " "; cout << endl;

// g++ -Wall -Wshadow -std=c++11 a.cpp && ./a.out


typedef vector<vector<bitset<2000>>> DEEPEE;


void solve(vector<pair<int,int>> & cur, DEEPEE & dp, vector<string> & inp, int n) {

	for (auto p : cur) {
		int f = p.first;
		int s = p.second;
		if (inp[f][s] == 'o') {
			if (f > 0) {
				dp[f][s] |= (dp[f-1][s] << 1);
			}
			if (s > 0) {
				dp[f][s] |= (dp[f][s-1] << 1);
			}
		} else {
			if (f > 0) {
				dp[f][s] |= dp[f-1][s];
			}
			if (s > 0) {
				dp[f][s] |= dp[f][s-1];
			}
		}
	}

	if (cur.size() == 1 && cur[0].first == n-1) {
		return;
	}

	set<pair<int,int>> newcur;
	for (auto p : cur) {
		int f = p.first;
		int s = p.second;
		if (f < n-1) {
			newcur.insert({f + 1, s});
		}
		if (s < n-1) {
			newcur.insert({f, s + 1});
		}
	}
	vector<pair<int,int>> nxt;

	nxt.assign(newcur.begin(), newcur.end());
	sort(nxt.begin(), nxt.end());
	solve(nxt, dp, inp, n);
}




int main() {
	std::ios::sync_with_stdio(false);cin.tie(0);
	int n;cin>>n;

	vector<string> inp;
	for (int i = 0; i < n; i++) {
		string s; cin>>s;
		inp.push_back(s);
	}

	vector<vector<bitset<2000>>> dp(n, vector<bitset<2000>>(n, bitset<2000>()));
	dp[0][0].set(0, 1);

	vector<pair<int,int>> cur = {{0,0}};
	solve(cur, dp, inp, n);

	cout << dp[n-1][n-1].count()<<endl;


}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
..........
..........
..........
..........
...

correct output
1

user output
1

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
o.o.......
..........
.o...o.oo.
..o...o.oo
...

correct output
9

user output
9

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
o......o..
oo.oo.....
oooo....oo
o.......oo
...

correct output
14

user output
14

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
..ooooo.oo
.ooo.o..oo
.....ooo.o
ooo.ooo.oo
...

correct output
12

user output
12

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
oooooooooo
ooo....ooo
.oo.oo.ooo
oooooooooo
...

correct output
10

user output
10

Test 6

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
oooooooooo
oooooooooo
oooooooooo
oooooooooo
...

correct output
1

user output
1

Test 7

Group: 2, 3

Verdict: ACCEPTED

input
100
.................................

correct output
1

user output
1

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
100
.........o.....o.........o..o....

correct output
114

user output
114

Test 9

Group: 2, 3

Verdict: ACCEPTED

input
100
oo..oo.oo..o...o..o.o..o.........

correct output
151

user output
151

Test 10

Group: 2, 3

Verdict: ACCEPTED

input
100
o..o.ooo..oo.o.o.o..o.o..o..oo...

correct output
143

user output
143

Test 11

Group: 2, 3

Verdict: ACCEPTED

input
100
oo..oooooooooooo.oooo.o.o.oooo...

correct output
115

user output
115

Test 12

Group: 2, 3

Verdict: ACCEPTED

input
100
oooooooooooooooooooooooooooooo...

correct output
1

user output
1

Test 13

Group: 3

Verdict: ACCEPTED

input
1000
.................................

correct output
1

user output
1

Test 14

Group: 3

Verdict: ACCEPTED

input
1000
o..........o...o...o...o.........

correct output
1121

user output
1121

Test 15

Group: 3

Verdict: ACCEPTED

input
1000
.o.............o....o.o......o...

correct output
1583

user output
1583

Test 16

Group: 3

Verdict: ACCEPTED

input
1000
oooooo.oooooo.....oooo..o...o....

correct output
1574

user output
1574

Test 17

Group: 3

Verdict: ACCEPTED

input
1000
ooooo.oo.oooooooooo...o...oo.....

correct output
1147

user output
1147

Test 18

Group: 3

Verdict: ACCEPTED

input
1000
oooooooooooooooooooooooooooooo...

correct output
1

user output
1