Code Submission Evaluation System Login

Datatähti 2019 alku

Start:2018-10-01 00:00:00
End:2018-10-15 00:00:00
 

Tasks | Messages | Scoreboard | Statistics


CSES - Datatähti 2019 alku - Results
History
2018-10-03 03:58:29100
2018-10-03 03:56:0529
2018-10-03 03:55:220
2018-10-03 03:53:3629
2018-10-03 03:52:1129
2018-10-03 03:46:4029
2018-10-03 02:42:5429
2018-10-03 02:13:2829
2018-10-03 02:00:160
2018-10-03 01:38:320
2018-10-02 21:22:560
2018-10-02 21:19:520
Task:Leimasin
Sender:Olli
Submission time:2018-10-03 03:58:29
Language:C++
Status:READY
Score:100

Feedback

groupverdictscore
#1ACCEPTED29
#2ACCEPTED31
#3ACCEPTED40

Test results

testverdicttime (s)group
#1ACCEPTED0.02 / 1.001details
#2ACCEPTED0.03 / 1.001details
#3ACCEPTED0.02 / 1.001details
#4ACCEPTED0.02 / 1.001details
#5ACCEPTED0.02 / 1.001details
#6ACCEPTED0.01 / 1.001details
#7ACCEPTED0.01 / 1.001details
#8ACCEPTED0.02 / 1.001details
#9ACCEPTED0.01 / 1.001details
#10ACCEPTED0.01 / 1.001details
#11ACCEPTED0.01 / 1.001details
#12ACCEPTED0.03 / 1.001details
#13ACCEPTED0.02 / 1.001details
#14ACCEPTED0.01 / 1.001details
#15ACCEPTED0.01 / 1.002details
#16ACCEPTED0.03 / 1.002details
#17ACCEPTED0.02 / 1.002details
#18ACCEPTED0.01 / 1.002details
#19ACCEPTED0.02 / 1.002details
#20ACCEPTED0.02 / 1.002details
#21ACCEPTED0.02 / 1.002details
#22ACCEPTED0.01 / 1.002details
#23ACCEPTED0.03 / 1.002details
#24ACCEPTED0.01 / 1.002details
#25ACCEPTED0.02 / 1.002details
#26ACCEPTED0.02 / 1.002details
#27ACCEPTED0.02 / 1.002details
#28ACCEPTED0.01 / 1.002details
#29ACCEPTED0.01 / 1.003details
#30ACCEPTED0.03 / 1.003details
#31ACCEPTED0.02 / 1.003details
#32ACCEPTED0.02 / 1.003details
#33ACCEPTED0.01 / 1.003details
#34ACCEPTED0.02 / 1.003details
#35ACCEPTED0.01 / 1.003details
#36ACCEPTED0.02 / 1.003details
#37ACCEPTED0.02 / 1.003details
#38ACCEPTED0.02 / 1.003details
#39ACCEPTED0.02 / 1.003details
#40ACCEPTED0.05 / 1.003details
#41ACCEPTED0.01 / 1.003details
#42ACCEPTED0.03 / 1.003details

Compiler report

input/code.cpp: In function 'std::vector<int> way(std::__cxx11::string)':
input/code.cpp:31:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i <= t.length() - m; ++i) {
                 ~~^~~~~~~~~~~~~~~~~
input/code.cpp: In function 'int main()':
input/code.cpp:103:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 1; i < ans.size() - 1; ++i) {
                 ~~^~~~~~~~~~~~~~~~
input/code.cpp:106:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < ans.size() - 1; ++i) {
                 ~~^~~~~~~~~~~~~~~~
input/code.cpp:156:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(finAns.size() > 10*n) actuallyWorks = false;
     ~~~~~~~~~~~~~~^~~~~~
input/code.cpp:173:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 1; i < an.size(); ++i) {
                  ~~^~~~~~~~~~~
input/code.cpp:186:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 1; i < an.size(); ++i) {
                  ~~^~~~~~~~~~~

Code

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int N = 1e4 + 5;
const int M = 1e3;

string s, c;

int am;
int counter;
vector<int> way(string t) {
	++counter;
	if(counter > M) {
		vector<int> v;
		v.push_back(-2);
		return v;
	}
	int m = c.length();
	if(am == 0) {
		vector<int> v;
		v.push_back(-1);
		return v;
	}
	int k = 0;
	for(int i = 0; i < m; ++i) {
		if(t[i] != '?') ++k;
	}
	for(int i = 0; i <= t.length() - m; ++i) {
		bool w = true;
		if(i > 0) {
			if(t[i-1] != '?') {
				--k;
			}
			if(t[i+m-1] != '?') {
				++k;
			}
		}
		if(k == 0) continue;
		for(int j = i; j < i + m; ++j) {
			if(t[j] != '?' && c[j-i] != t[j]) {
				w = false;
				break;
			}
		}
		if(w) {
			string u = t;
			for(int j = i; j < i+m; ++j) {
				if(u[j] != '?') {
					--am;
					u[j] = '?';				
				}
			}
			vector<int> v = way(u);
			if(v.size() == 1 && v[0] == -2) continue;
			v.push_back(i);
			return v;

		}
	}
	vector<int> v;
	v.push_back(-2);
	return v;
}

vector<int> ans;

bool mark[N];

int main() {
	cin >> s >> c;
	int n = s.length();
	int m = c.length();
//	cout << n << " " << m << "\n";
	ans.push_back(n+1);
	ans.push_back(-1);
	for(int i = n - m; i >= 0; --i) {
		bool w = true;
	
		for(int j = i+m-1; j >= i; --j) {
			if(c[j-i] != s[j]) {
				w = false;
			}
			
		}
		if(w) {
			ans.push_back(i);
			for(int j = i; j < i+m; ++j) {
				mark[j] = true;
			}
		}
	}
	bool actuallyWorks = true;
	if(ans.size() == 2) {
		actuallyWorks = false;
	}

	sort(ans.begin(), ans.end());
	vector<int> finAns;

	for(int i = 1; i < ans.size() - 1; ++i) {
		finAns.push_back(ans[i]);
	}
	for(int i = 0; i < ans.size() - 1; ++i) {
		int k = ans[i+1] - 1;
		for(int j = k; j >= ans[i] + 1; --j) {
			bool w = true;
			if(j + m > n) continue;
			bool ok = false;
			for(int a = j; a < j+m; ++a) {
				if(!mark[a]) {
					ok = true;
				}
				if(!mark[a] && c[a-j] != s[a]) {
					w = false;
					break;
				}
			}
			if(w && ok) {
			//	cout << "Add " << j << "\n";
				finAns.push_back(j);
				for(int a = j; a < j+m; ++a) {
					mark[a] = true;
				}
			}
		}
	}
/*	for(int i = 0; i < n; ++i) {
		cout << mark[i] << " ";
	}
	cout << "\n";
*/	
	bool w = true;
	for(int i = 0; i < n; ++i) {
		if(!mark[i]) {
			w = false;
			break;
		}
	}
	if(!w) {
		actuallyWorks = false;
	}

	string t = "";
	for(int i = 0; i < n; ++i) {
		t+="?";
	}
	for(int i = finAns.size() - 1; i >= 0; --i) {
		for(int j = finAns[i]; j < finAns[i] + m; ++j) {
			t[j] = c[j-finAns[i]];
		}
	}
	if(t != s) actuallyWorks = false;
	if(finAns.size() > 10*n) actuallyWorks = false;
	if(actuallyWorks) {
		cout << finAns.size() << "\n";
		for(int i = finAns.size() - 1; i >= 0; --i) {
			cout << finAns[i]+1 << " ";
		}
		cout << "\n";
		return 0;
	}
	
	am = s.length();
	vector<int> an = way(s);
	if((an.size() == 1 && an[0] == -2) || counter > M) {
		cout << -1 << "\n";
	} else {
		string t = s;
		int m = c.size();
		for(int i = 1; i < an.size(); ++i) {
			int k = an[i];
			for(int j = k; j < k + m; ++j) {
				t[j] = c[j-k];
			}
		}
		if(t != s) {
			while(true) {
				cout << "Oh no!\n";
			}
		}

		cout << an.size() - 1 << "\n";
		for(int i = 1; i < an.size(); ++i) {
			cout << an[i]+1 << " ";
		}
		cout << "\n";
	}

}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
BBBBBBBBBB
B
view   save

correct output
10
10 9 8 7 6 5 4 3 2 1
view   save

user output
10
10 9 8 7 6 5 4 3 2 1
view   save

Test 2

Group: 1

Verdict: ACCEPTED

input
AABBABABAB
AB
view   save

correct output
6
1 9 7 5 3 2
view   save

user output
6
3 1 9 7 5 2
view   save

Test 3

Group: 1

Verdict: ACCEPTED

input
AABAAABAAA
AABAA
view   save

correct output
4
6 5 2 1
view   save

user output
3
6 5 1
view   save

Test 4

Group: 1

Verdict: ACCEPTED

input
BAAAAAABBB
BAAAAAABB
view   save

correct output
2
2 1
view   save

user output
2
2 1
view   save

Test 5

Group: 1

Verdict: ACCEPTED

input
AAABBABBAA
AAABBABBAA
view   save

correct output
1
1
view   save

user output
1
1
view   save

Test 6

Group: 1

Verdict: ACCEPTED

input
GGGGGGGGGG
G
view   save

correct output
10
10 9 8 7 6 5 4 3 2 1
view   save

user output
10
10 9 8 7 6 5 4 3 2 1
view   save

Test 7

Group: 1

Verdict: ACCEPTED

input
QUUQUUQUQU
QU
view   save

correct output
6
9 7 5 4 2 1
view   save

user output
6
5 2 9 7 4 1
view   save

Test 8

Group: 1

Verdict: ACCEPTED

input
DWXDWDWXHJ
DWXHJ
view   save

correct output
3
1 4 6
view   save

user output
3
1 4 6
view   save

Test 9

Group: 1

Verdict: ACCEPTED

input
FSOCRDGQBB
FSOCRDGQB
view   save

correct output
2
2 1
view   save

user output
2
2 1
view   save

Test 10

Group: 1

Verdict: ACCEPTED

input
OETMIMPUPD
OETMIMPUPD
view   save

correct output
1
1
view   save

user output
1
1
view   save

Test 11

Group: 1

Verdict: ACCEPTED

input
DOWEUOWUEU
DOWEU
view   save

correct output
-1
view   save

user output
-1
view   save

Test 12

Group: 1

Verdict: ACCEPTED

input
JQZYVSIWTE
JQZVYSIWTE
view   save

correct output
-1
view   save

user output
-1
view   save

Test 13

Group: 1

Verdict: ACCEPTED

input
ABABABABA
ABA
view   save

correct output
4
7 5 3 1
view   save

user output
4
7 5 3 1
view   save

Test 14

Group: 1

Verdict: ACCEPTED

input
AAAAAAAAAA
AAAAAAAAAB
view   save

correct output
-1
view   save

user output
-1
view   save

Test 15

Group: 2

Verdict: ACCEPTED

input
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB...
B
view   save

correct output
100
100 99 98 97 96 95 94 93 92 91...
view   save

user output
100
100 99 98 97 96 95 94 93 92 91...
view   save

Test 16

Group: 2

Verdict: ACCEPTED

input
BABABAAAAAAAAAAAAAAAAAABABAAAA...
BABAAAAAAA
view   save

correct output
36
87 43 24 1 91 79 69 68 67 66 6...
view   save

user output
36
87 91 79 69 68 67 66 65 64 63 ...
view   save

Test 17

Group: 2

Verdict: ACCEPTED

input
ABABAAAAABABBBBAAAABBBBAABBBBB...
ABABAAAAABABBBBAAAABBBBAABBBBB...
view   save

correct output
22
51 50 43 41 31 28 26 24 21 20 ...
view   save

user output
22
51 50 43 41 31 28 26 24 21 20 ...
view   save

Test 18

Group: 2

Verdict: ACCEPTED

input
AAABABAAAABBBBBABABBAABBABABBA...
AABABAAAABBBBBABABBAABBABABBAB...
view   save

correct output
2
1 2
view   save

user output
2
1 2
view   save

Test 19

Group: 2

Verdict: ACCEPTED

input
AABABBBBBBAABBABABBBBBBAABBAAA...
AABABBBBBBAABBABABBBBBBAABBAAA...
view   save

correct output
1
1
view   save

user output
1
1
view   save

Test 20

Group: 2

Verdict: ACCEPTED

input
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSS...
S
view   save

correct output
100
100 99 98 97 96 95 94 93 92 91...
view   save

user output
100
100 99 98 97 96 95 94 93 92 91...
view   save

Test 21

Group: 2

Verdict: ACCEPTED

input
NNNININIMNIMKLMXCNIMKLMXCDEIMK...
NIMKLMXCDE
view   save

correct output
18
1 2 3 74 5 79 58 7 84 64 37 10...
view   save

user output
18
74 79 84 58 64 27 37 1 2 3 5 7...
view   save

Test 22

Group: 2

Verdict: ACCEPTED

input
VYQFNHMVTKOEYCXWINLKLHVFMEPQEU...
VYQFNHMVTKOEYCXWINLKLHVFMEPQEU...
view   save

correct output
3
51 2 1
view   save

user output
2
51 1
view   save

Test 23

Group: 2

Verdict: ACCEPTED

input
IISNROLHLOJIWPTVFHFLUQRIROVLYP...
ISNROLHLOJIWPTVFHFLUQRIROVLYPM...
view   save

correct output
2
1 2
view   save

user output
2
1 2
view   save

Test 24

Group: 2

Verdict: ACCEPTED

input
WPMEMERJXXADLKONUZPUUFTPSXDHIV...
WPMEMERJXXADLKONUZPUUFTPSXDHIV...
view   save

correct output
1
1
view   save

user output
1
1
view   save

Test 25

Group: 2

Verdict: ACCEPTED

input
LNSBGZAWFJZAWFJWFJLNSBLNSBGZAL...
LNSBGZAWFJ
view   save

correct output
-1
view   save

user output
-1
view   save

Test 26

Group: 2

Verdict: ACCEPTED

input
IPIPYFUMRIPYFUMRLPIIIPYFIPYFUM...
IPYFUMRLPSYSBQWHGXQWLHBXMXXEYB...
view   save

correct output
-1
view   save

user output
-1
view   save

Test 27

Group: 2

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...
ABA
view   save

correct output
49
97 95 93 91 89 87 85 83 81 79 ...
view   save

user output
49
97 95 93 91 89 87 85 83 81 79 ...
view   save

Test 28

Group: 2

Verdict: ACCEPTED

input
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
view   save

correct output
-1
view   save

user output
-1
view   save

Test 29

Group: 3

Verdict: ACCEPTED

input
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB...
view   save

correct output
1000
1000 999 998 997 996 995 994 9...
view   save

user output
1000
1000 999 998 997 996 995 994 9...
view   save

Test 30

Group: 3

Verdict: ACCEPTED

input
BBBBBBBBAABBBBBBBBAABBBBBBBAAB...
view   save

correct output
218
1 626 607 519 415 5 975 957 92...
view   save

user output
218
975 984 991 971 957 966 970 95...
view   save

Test 31

Group: 3

Verdict: ACCEPTED

input
AABBBABAABABAAABBAAAAAAABBBAAB...
view   save

correct output
55
569 639 403 761 663 437 172 90...
view   save

user output
55
901 900 897 896 895 885 884 88...
view   save

Test 32

Group: 3

Verdict: ACCEPTED

input
ABBAAABAAABAAAAABBABABBABBABBB...
view   save

correct output
2
2 1
view   save

user output
2
2 1
view   save

Test 33

Group: 3

Verdict: ACCEPTED

input
BAAABBABBBAAAABAAAABBBBABAABAA...
view   save

correct output
1
1
view   save

user output
1
1
view   save

Test 34

Group: 3

Verdict: ACCEPTED

input
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU...
view   save

correct output
1000
1000 999 998 997 996 995 994 9...
view   save

user output
1000
1000 999 998 997 996 995 994 9...
view   save

Test 35

Group: 3

Verdict: ACCEPTED

input
KSBMRKKSBMRZXBDKSKSBMRZXBDAMRZ...
view   save

correct output
178
723 731 1 935 857 820 760 735 ...
view   save

user output
178
991 985 990 979 977 976 965 97...
view   save

Test 36

Group: 3

Verdict: ACCEPTED

input
ILYLILYLVJILYLVJZCCQDLFRLSXZDM...
view   save

correct output
21
671 54 747 504 113 1 856 764 5...
view   save

user output
21
856 901 671 747 764 796 608 50...
view   save

Test 37

Group: 3

Verdict: ACCEPTED

input
ZZJZNKHDLJBPXIAZNJIIGBEEJFSDAF...
view   save

correct output
2
1 2
view   save

user output
2
1 2
view   save

Test 38

Group: 3

Verdict: ACCEPTED

input
FIMWTOLSRKOWYDPCOFUJZMXJEJFKSU...
view   save

correct output
1
1
view   save

user output
1
1
view   save

Test 39

Group: 3

Verdict: ACCEPTED

input
AIVHCGUMKSTIYBRNPONXHRFVBKPYHX...
view   save

correct output
-1
view   save

user output
-1
view   save

Test 40

Group: 3

Verdict: ACCEPTED

input
QPMSLIDCLFLBEXGVVQQNSVKJYXGETC...
view   save

correct output
-1
view   save

user output
-1
view   save

Test 41

Group: 3

Verdict: ACCEPTED

input
ABABABABABABABABABABABABABABAB...
view   save

correct output
499
997 995 993 991 989 987 985 98...
view   save

user output
499
997 995 993 991 989 987 985 98...
view   save

Test 42

Group: 3

Verdict: ACCEPTED

input
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
view   save

correct output
-1
view   save

user output
-1
view   save