답안 #584235

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
584235 2022-06-27T05:02:47 Z talant117408 Necklace (Subtask 1-3) (BOI19_necklace1) C++17
45 / 85
1500 ms 70836 KB
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
 
#define pb                  push_back
#define mp                  make_pair
#define all(v)              (v).begin(),(v).end()
#define rall(v)             (v).rbegin(),(v).rend()
#define lb                  lower_bound
#define ub                  upper_bound
#define sz(v)               int((v).size())
#define do_not_disturb      ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl                '\n'

vector <int> z_function(string s) {
    int n = sz(s);
    vector <int> z(n);
    for (int i = 1, l = 0, r = 0; i < n; i++) {
        if (i <= r)
            z[i] = min (r - i + 1, z[i - l]);
        while (i + z[i] < n && s[z[i]] == s[i + z[i]])
            z[i]++;
        if (i + z[i] - 1 > r)
            l = i, r = i + z[i] - 1;
    }
    return z;
}

void solve() {
    string s, t;
    cin >> s >> t;
    int ans = 0, inds = -1, indt = -1;
    vector <vector <int>> Z(sz(s));
    
    string q = s;
    for (int i = 0; i < sz(s); i++) {
        string tmp = q + '$' + t;
        Z[i] = z_function(tmp);
        rotate(q.begin(), q.begin() + 1, q.end());
        q.back() = '#';
    }
    for (int i = 0; i < sz(s); i++) {
        int start = sz(s) + 1;
        for (int j = start; j < start + sz(t); j++) {
            if (Z[i][j] == 0) continue;
            int nxt = (i + Z[i][j]) % sz(s);
            for (int k = start; k < j; k++) {
                if (Z[nxt][k] == j - k && Z[i][j] + Z[nxt][k] > ans) {
                    ans = Z[i][j] + Z[nxt][k];
                    inds = i; indt = k - start;
                }
            }
        }
    }
    q = s;
    reverse(all(t));
    for (int i = 0; i < sz(s); i++) {
        string tmp = q + '$' + t;
        Z[i] = z_function(tmp);
        rotate(q.begin(), q.begin() + 1, q.end());
        q.back() = '#';
    }
    for (int i = 0; i < sz(s); i++) {
        int start = sz(s) + 1;
        for (int j = start; j < start + sz(t); j++) {
            if (Z[i][j] == 0) continue;
            int nxt = (i + Z[i][j]) % sz(s);
            for (int k = start; k < j; k++) {
                if (Z[nxt][k] == j - k && Z[i][j] + Z[nxt][k] > ans) {
                    ans = Z[i][j] + Z[nxt][k];
                    inds = i; indt = sz(t) - (k - start + ans - 1) - 1;
                }
            }
        }
    }
    
    cout << ans << endl;
    cout << inds << ' ' << indt << endl;
}

int main() {
    do_not_disturb
    
    int t = 1;
    //~ cin >> t;
    while (t--) {
        solve();
    }
    
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 47 ms 1492 KB Output is correct
7 Correct 18 ms 1584 KB Output is correct
8 Correct 31 ms 1456 KB Output is correct
9 Correct 21 ms 1492 KB Output is correct
10 Correct 5 ms 1492 KB Output is correct
11 Correct 6 ms 1560 KB Output is correct
12 Correct 28 ms 1364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 47 ms 1492 KB Output is correct
7 Correct 18 ms 1584 KB Output is correct
8 Correct 31 ms 1456 KB Output is correct
9 Correct 21 ms 1492 KB Output is correct
10 Correct 5 ms 1492 KB Output is correct
11 Correct 6 ms 1560 KB Output is correct
12 Correct 28 ms 1364 KB Output is correct
13 Execution timed out 1601 ms 70836 KB Time limit exceeded
14 Halted 0 ms 0 KB -