CSES - Datatähti 2019 alku - Results
Submission details
Task:Kolikot
Sender:Nanohenry
Submission time:2018-10-05 19:58:56 +0300
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.01 s1details
#20.01 s1details
#30.01 s1details
#40.01 s1details
#50.01 s1details
#60.02 s1details
#70.01 s1details
#80.01 s1details
#90.02 s1details
#100.02 s1details
#110.02 s2details
#120.02 s2details
#130.01 s2details
#140.02 s2details
#150.02 s2details
#160.02 s2details
#170.01 s2details
#180.01 s2details
#190.03 s2details
#200.01 s2details
#210.02 s3details
#220.02 s3details
#230.02 s3details
#240.01 s3details
#250.02 s3details
#260.01 s3details
#270.01 s3details
#280.01 s3details
#290.01 s3details
#300.01 s3details

Compiler report

input/code.cpp: In function 'void search(std::__cxx11::string)':
input/code.cpp:16:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (x == t.size()) {
         ~~^~~~~~~~~~~
input/code.cpp:19:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (zi > 10 * t.size()) {
         ~~~^~~~~~~~~~~~~~~
input/code.cpp:25:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (long i = 0; i <= f.size() - s.size(); i++) {
                      ~~^~~~~~~~~~~~~~~~~~~~~~
input/code.cpp:28:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (long j = 0; j < s.size(); j++) {
                          ~~^~~~~~~~~~
input/code.cpp:34:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 if (c == s.size()) {
                     ~~^~~~~~~~~~~
input/code.cpp:52:24: warn...

Code

#include <iostream>
#include <string>
#include <vector>
#include <set>

using namespace std;

string t, s;
long z[100000];
long zi = 0;
set<char> tc, sc;
bool m;
long b, k, c, q, x;

void search(string f) {
    if (x == t.size()) {
        return;
    }
    if (zi > 10 * t.size()) {
        m = 1;
        return;
    }
    b = f.size() + 1;
    k = -1;
    for (long i = 0; i <= f.size() - s.size(); i++) {
        c = 0;
        q = 0;
        for (long j = 0; j < s.size(); j++) {
            if (f[i + j] == s[j] || f[i + j] == '?') {
                if (f[i + j] == '?') {
                    q++;
                }
                c++;
                if (c == s.size()) {
                    if (q < b) {
                        b = q;
                        k = i;
                    }
                    c = 0;
                    q = 0;
                }
            } else {
                c = 0;
                q = 0;
            }
        }
    }
    if (k == -1) {
        m = 1;
        return;
    }
    for (long r = k; r < k + s.size(); r++) {
        if (f[r] != '?') {
            x++;
        }
        f[r] = '?';
    }
    z[zi++] = k;
    search(f);
}

int main() {
    cin >> t >> s;
    if (t == s) {
        cout << "1\n1\n";
        return 0;
    }
    for (long i = 0; i < s.size(); i++) { // first do "some" checks
        sc.insert(s[i]);
    }
    for (long i = 0; i < t.size(); i++) {
        tc.insert(t[i]);
    }
    if (s.size() > t.size() || s[0] != t[0] || s[s.size() - 1] != t[t.size() - 1]) {
        m = 1;
    }
    if (tc.size() != sc.size()) {
        m = 1;
    }
    if (!m && tc.size() == 1 && sc.size() == 1) {
        if (s.size() == 1) {
            cout << t.size() / s.size() << '\n';
            for (long i = 1; i <= t.size() / s.size(); i++) {
                cout << i << ' ';
            }
            cout << '\n';
        } else {
            cout << t.size() / s.size() << '\n';
            for (long i = 0; i <= t.size() - s.size(); i += s.size()) {
                cout << i + 1 << ' ';
            }
            if (t.size() % s.size() != 0) {
                cout << t.size() - s.size() + 1;
            }
            cout << '\n';
        }
    } else {
        if (!m) {
            search(t);
        }
        if (m) {
            cout << "-1\n";
        } else {
            cout << zi << '\n';
            for (long i = zi - 1; i >= 0; i--) {
                cout << z[i] + 1 << ' ';
            }
            cout << '\n';
        }
    }
    //system("pause");
}

Test details

Test 1

Group: 1

Verdict:

input
1

correct output
1

user output
-1

Test 2

Group: 1

Verdict:

input
2

correct output
1

user output
-1

Test 3

Group: 1

Verdict:

input
3

correct output
2
1 2 

user output
-1

Test 4

Group: 1

Verdict:

input
4

correct output
2
1 3 

user output
-1

Test 5

Group: 1

Verdict:

input
5

correct output
2
1 4 

user output
-1

Test 6

Group: 1

Verdict:

input
6

correct output
3
1 2 3 

user output
-1

Test 7

Group: 1

Verdict:

input
7

correct output
3
1 2 4 

user output
-1

Test 8

Group: 1

Verdict:

input
8

correct output
3
1 2 5 

user output
-1

Test 9

Group: 1

Verdict:

input
9

correct output
3
1 2 6 

user output
-1

Test 10

Group: 1

Verdict:

input
10

correct output
4
1 2 3 4 

user output
-1

Test 11

Group: 2

Verdict:

input
11

correct output
4
1 2 3 5 

user output
-1

Test 12

Group: 2

Verdict:

input
54

correct output
9
1 2 3 4 5 6 7 8 18 

user output
-1

Test 13

Group: 2

Verdict:

input
55

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

user output
-1

Test 14

Group: 2

Verdict:

input
56

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

user output
-1

Test 15

Group: 2

Verdict:

input
123

correct output
15
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 16

Group: 2

Verdict:

input
819

correct output
39
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 17

Group: 2

Verdict:

input
820

correct output
40
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 18

Group: 2

Verdict:

input
821

correct output
40
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 19

Group: 2

Verdict:

input
999

correct output
44
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 20

Group: 2

Verdict:

input
1000

correct output
44
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 21

Group: 3

Verdict:

input
1274

correct output
49
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 22

Group: 3

Verdict:

input
1275

correct output
50
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 23

Group: 3

Verdict:

input
1276

correct output
50
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 24

Group: 3

Verdict:

input
12345

correct output
156
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 25

Group: 3

Verdict:

input
123456

correct output
496
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 26

Group: 3

Verdict:

input
10000000

correct output
4471
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 27

Group: 3

Verdict:

input
100000000

correct output
14141
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 28

Group: 3

Verdict:

input
500000000

correct output
31622
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 29

Group: 3

Verdict:

input
999999999

correct output
44720
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1

Test 30

Group: 3

Verdict:

input
1000000000

correct output
44720
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
-1