CSES - Harjoituskisa 7.1.2018 - Results
Submission details
Task:Ruudukko
Sender:Yytsi
Submission time:2018-01-08 21:20:19 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED17
#2ACCEPTED42
#3ACCEPTED41
Test results
testverdicttimegroup
#1ACCEPTED0.05 s1details
#2ACCEPTED0.05 s1details
#3ACCEPTED0.05 s1details
#4ACCEPTED0.06 s1details
#5ACCEPTED0.05 s1details
#6ACCEPTED0.04 s2details
#7ACCEPTED0.04 s2details
#8ACCEPTED0.07 s2details
#9ACCEPTED0.05 s2details
#10ACCEPTED0.05 s2details
#11ACCEPTED0.31 s3details
#12ACCEPTED0.31 s3details
#13ACCEPTED0.27 s3details
#14ACCEPTED0.28 s3details
#15ACCEPTED0.32 s3details

Code

#include <iostream>
#include <queue>
#include <utility>
#include <string>

using namespace std;
#define N 2501
char grid[N][N];
bool goingTo[N][N];
queue<pair<int, int>> q;
string best = "";
int n;

void BFS() {
	// Start from (0, 0)
	q.push({0, 0});
	best += grid[0][0];
	while (!q.empty()) {
		// Figure the out the best character.
		char bestR = '|';
		queue<pair<int,int>> possible;
		while (!q.empty()) {
			auto c = q.front(); q.pop();
			int y = c.first, x = c.second;
			// Down.
			if (grid[y + 1][x] && !goingTo[y + 1][x]) {
				possible.push({y + 1, x});
				goingTo[y + 1][x] = true;
				if (bestR > grid[y + 1][x]) bestR = grid[y + 1][x];
			}
			// Right.
			if (grid[y][x + 1] && !goingTo[y][x + 1]) {
				possible.push({y, x + 1});
				goingTo[y][x + 1] = true;
				if (bestR > grid[y][x + 1]) bestR = grid[y][x + 1];
			}
		}
		// <q> will be empty. We figured the best routes to go towards.
		
		// Fill <q> again with the (distinct) ones that led to the best route.
		while (!possible.empty()) {
			auto t = possible.front(); possible.pop();
			if (grid[t.first][t.second] == bestR) q.push(t); // This is one of the best routes.
		}
		
		if (bestR != '|') best += bestR; // Atleast one is going the best route, so add it.
	}
}

int main(int argc, char** argv) {
	cin >> n; cin.ignore();
	for (int i = 0; i < n; i++) {
		string s; cin >> s; cin.ignore();
		for (int j = 0; j < n; j++) {
			grid[i][j] = s[j];
		}
	}
	BFS();
	cout << best;
	return 0;
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
5
ILRBG
SBRHV
PAGKM
YKKNG
...

correct output
ILBAGKMGQ

user output
ILBAGKMGQ

Test 2

Group: 1

Verdict: ACCEPTED

input
5
KQQBB
IWDQN
TENSD
PGXMV
...

correct output
KITEGMIWH

user output
KITEGMIWH

Test 3

Group: 1

Verdict: ACCEPTED

input
5
DSWIO
RWFDY
ISZRK
GBVYS
...

correct output
DRIGBJDLU

user output
DRIGBJDLU

Test 4

Group: 1

Verdict: ACCEPTED

input
5
VGQFP
FTISL
QCLYU
EYNZZ
...

correct output
VFQCLNRZP

user output
VFQCLNRZP

Test 5

Group: 1

Verdict: ACCEPTED

input
5
WCSNV
UWNDB
WDHZA
XGRBQ
...

correct output
WCSNDBAQW

user output
WCSNDBAQW

Test 6

Group: 2

Verdict: ACCEPTED

input
100
WFNOQZOAMZPHFRDYGXQNUPWVMFDNJF...

correct output
WFAHHJDEVFSGGOGMIFDEEDKPSHBBRX...

user output
WFAHHJDEVFSGGOGMIFDEEDKPSHBBRX...

Test 7

Group: 2

Verdict: ACCEPTED

input
100
UEOPTOSBCABXIPUOQRKWKMZRGRZUSS...

correct output
UEGHLIWDHDVKTECPACBJABFMBOASOF...

user output
UEGHLIWDHDVKTECPACBJABFMBOASOF...

Test 8

Group: 2

Verdict: ACCEPTED

input
100
XCKBHDFAPMFZNJANJUENHGXYBBHFJR...

correct output
XCCENJBCBUFBIOJOJDREIBGRUKVRQS...

user output
XCCENJBCBUFBIOJOJDREIBGRUKVRQS...

Test 9

Group: 2

Verdict: ACCEPTED

input
100
YEBXYYLVUDYIHNUMRCUTAYVTNLMEZL...

correct output
YDJNBALIRDOVFBKDDJDFNSSMIDMFRM...

user output
YDJNBALIRDOVFBKDDJDFNSSMIDMFRM...

Test 10

Group: 2

Verdict: ACCEPTED

input
100
MVONBCDHJUKRKDGPNYSYGRXBLZOMLD...

correct output
MMSJFIKBSFCUMBBLXJCOUIRAPOKEJS...

user output
MMSJFIKBSFCUMBBLXJCOUIRAPOKEJS...

Test 11

Group: 3

Verdict: ACCEPTED

input
2500
LKEFOYQTRZJHADSYBRGQCUDOPMGYOF...

correct output
LDHPNOFPFOCGKPNCEQKANCJCBLGDKC...

user output
LDHPNOFPFOCGKPNCEQKANCJCBLGDKC...

Test 12

Group: 3

Verdict: ACCEPTED

input
2500
UGPBLFMZGVIANZLHRTPJIHMUZWOXKA...

correct output
UGLSEBMGHSONFJBGOJJAGBJCLFAHAP...

user output
UGLSEBMGHSONFJBGOJJAGBJCLFAHAP...

Test 13

Group: 3

Verdict: ACCEPTED

input
2500
YRUOZBRTLLMMAHNIHQLZHBYCDHTHMS...

correct output
YELLJAAKETHCOWAJNDGJBOFNTCCEDA...

user output
YELLJAAKETHCOWAJNDGJBOFNTCCEDA...

Test 14

Group: 3

Verdict: ACCEPTED

input
2500
RXZEOTVYZBQUOJJFLCJCYCZDONBLUR...

correct output
RTDHUEBGLTKRHKIQLGKILATNHWPIBO...

user output
RTDHUEBGLTKRHKIQLGKILATNHWPIBO...

Test 15

Group: 3

Verdict: ACCEPTED

input
2500
IOTRAMNHKWWBVPQPPWTTBHOYDFXPOX...

correct output
IOTQTIDOBFMJBDNOFEFGGIBGAGQBIC...

user output
IOTQTIDOBFMJBDNOFEFGGIBGAGQBIC...