Submission #1222170

#TimeUsernameProblemLanguageResultExecution timeMemory
1222170hoa208Necklace (Subtask 4) (BOI19_necklace4)C++20
15 / 15
313 ms648 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define FOR(i, a, b) for(int i = (a); i <= (b); i++) #define FORD(i, b, a) for(int i = (b); i >= (a); i--) #define pa pair<ll, ll> #define fi first #define se second #define bit(mask, j) ((mask >> j) & 1) const ll mod = 1e9 + 7; const ll INF = 1e17; const ll N = 6e3 + 10; ll p1[N], p2[N]; void get(string s, ll *p) { FOR(i, 1, s.size() - 1) { p[i] = 0; ll k = p[i-1]; while(k > 0 && s[i] != s[k]) k = p[k - 1]; p[i] = k + (s[k] == s[i] ? 1 : 0); } } pair<ll, pa> slove(string s, string t, bool flag) { ll n = s.size(), m = t.size(); ll ans = 0; ll id_l = 0, id_r = 0; FOR(i, 0, n - 1) { string s1 = s.substr(0, i), s2 = s.substr(i, n - i); reverse(s1.begin(), s1.end()); string t1 = t, t2 = t; reverse(t2.begin(), t2.end()); get(s1 + "#" + t1, p1), get(s2 + "#" + t2, p2); FOR(j, 1, m) { ll val = p1[i + j] + p2[n + m - i - j]; if(ans <= val) { ans = val; id_l = i - p1[i + j]; id_r = flag ? m - j - p2[n + m - i - j] : j - p1[i + j]; } } } return {ans, {id_l, id_r}}; } int main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); if(fopen("hbmt.inp", "r")) { freopen("hbmt.inp", "r", stdin); freopen("hbmt.out", "w", stdout); } string s, t; cin >> s >> t; pair<ll, pa> ans1 = slove(s, t, 0); reverse(t.begin(), t.end()); pair<ll, pa> ans2 = slove(s, t, 1); if(ans1.fi > ans2.fi) { cout << ans1.fi << '\n'; cout << ans1.se.fi << ' ' << ans1.se.se << '\n'; } else { cout << ans2.fi << '\n'; cout << ans2.se.fi << ' ' << ans2.se.se << '\n'; } return 0; }

Compilation message (stderr)

necklace.cpp: In function 'int main()':
necklace.cpp:52:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |             freopen("hbmt.inp", "r", stdin);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
necklace.cpp:53:20: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |             freopen("hbmt.out", "w", stdout);
      |             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...