제출 #525527

#제출 시각아이디문제언어결과실행 시간메모리
525527Yazan_AlattarNecklace (Subtask 1-3) (BOI19_necklace1)C++14
5 / 85
1590 ms106556 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define F first #define S second #define pb push_back #define endl "\n" #define all(x) x.begin(), x.end() const int M = 100007; const ll inf = 1e18; const ll mod = 998244353; const double pi = acos(-1); const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1}; struct Hash { ll SEED = 57,MOD = 1e9 + 7; vector<ll> ha; vector<ll> power; void build(string x) { power.resize(x.size()); ha.resize(x.size()); power[0] = 1; for(int i=1; i<(int)power.size(); i++) power[i] = (power[i-1] * SEED)%MOD; ha[0] = x[0]; for(int i=1; i<(int)ha.size(); i++) ha[i] = (ha[i-1] * SEED + x[i])%MOD; } void Add(string x) { for(int i = 0; i < x.size(); i++) power.push_back((power.back() * SEED)%MOD); for(int i = 0; i < x.size(); i++) ha.push_back((ha.back() * SEED + x[i])%MOD); } ll get(int i, int j, int len) { if(j < i) return 0; ll ret = ha[j]; if (i) ret -= (ha[i-1] * power[j - i + 1])%MOD; ret = (ret % MOD + MOD) % MOD; return ret * power[len]; } }; ll ans, ansi, ansj; string s, t; map <ll, ll> mp; int main() { cin >> s >> t; Hash Hs, Ht; Hs.build(s); Ht.build(t); int n = s.size(), m = t.size(); for(int i = 0; i < n; ++i){ for(int j = i; j < n; ++j){ for(int k = i; k <= j; ++k){ mp[Hs.get(k, j, k - i) + Hs.get(i, k - 1, 0)] = i + 1; } } } for(int i = 0; i < m; ++i){ for(int j = i; j < m; ++j){ if(mp[Ht.get(i, j, 0)] && j - i + 1 > ans){ ans = j - i + 1; ansi = mp[Ht.get(i, j, 0)] - 1; ansj = i; } } } reverse(all(t)); Hash Hrt; Hrt.build(t); for(int i = 0; i < m; ++i){ for(int j = i; j < m; ++j){ if(mp[Hrt.get(i, j, 0)] && j - i + 1 > ans){ ans = j - i + 1; ansi = mp[Hrt.get(i, j, 0)] - 1; ansj = m - j - 1; } } } cout << ans << endl << ansi << " " << ansj << endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

necklace.cpp: In member function 'void Hash::Add(std::string)':
necklace.cpp:30:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |   for(int i = 0; i < x.size(); i++)   power.push_back((power.back() * SEED)%MOD);
      |                  ~~^~~~~~~~~~
necklace.cpp:31:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |   for(int i = 0; i < x.size(); i++)   ha.push_back((ha.back() * SEED + x[i])%MOD);
      |                  ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...