제출 #648530

#제출 시각아이디문제언어결과실행 시간메모리
648530LoboNecklace (Subtask 1-3) (BOI19_necklace1)C++17
5 / 85
123 ms15308 KiB
#include<bits/stdc++.h> using namespace std; const long long inf = (long long) 1e18 + 10; const int inf1 = (int) 1e9 + 10; #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() const int maxn = 3030; string a,b; int n, m, mod, pw[maxn]; void solve() { cin >> a >> b; n = a.size(); m = b.size(); mod = 1e9+7; pw[0] = 1; pw[1] = 1e4+9; for(int i = 2; i < max(n,m); i++) { pw[i] = pw[i-1]*pw[1]%mod; } map<int,vector<int>> sta,eda; int ansa, ansb, ans = 0; for(int i = 0; i < n; i++) { int cur = 0; for(int j = i; j < n; j++) { cur+= (a[j])*pw[j-i]; cur%= mod; // It exist one cur that starts in sta[cur].pb(i); eda[cur].pb(j); // cout << " " << i << " " << j << " " << cur << endl; } } for(int i = 0; i < m; i++) { int cur = 0; for(int j = i; j < m; j++) { cur+= (b[j])*pw[j-i]; cur%= mod; //comecando em i // if(eda.count(cur)) { // if(j-i+1 > ans) { // ans = j-i+1; // ansa = eda[cur][0]-j+i; // ansb = i; // } // } if(sta.count(cur)) { if(j-i+1 > ans) { ans = j-i+1; ansa = sta[cur][0]; ansb = i; } } } } reverse(all(b)); for(int i = 0; i < m; i++) { int cur = 0; for(int j = i; j < m; j++) { cur+= (b[j])*pw[j-i]; cur%= mod; //comecando em i // if(eda.count(cur)) { // if(j-i+1 > ans) { // ans = j-i+1; // ansa = eda[cur][0]-j+i; // ansb = i; // cout << i << " " << j << " " << cur << endl; // } // } if(sta.count(cur)) { if(j-i+1 > ans) { ans = j-i+1; ansa = sta[cur][0]; ansb = m-j-1; // cout << i << " " << j << " " << cur << endl; } } } } cout << ans << endl; cout << ansa << " " << ansb << endl; } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); // freopen("in.in", "r", stdin); // freopen("out.out", "w", stdout); int tt = 1; // cin >> tt; while(tt--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...