1개의 댓글이 있습니다.
-
-
WeissBlume -
struct Comparator {
const vector& group;
const int t;
Comparator(const vector&group, int t):
group(group), t(t) {}
// 생략
};reference 변수는 반드시 생성과 동시에 초기화돼야 합니다.
따라서 = 연산자로 대입하는 게 아니라 위와 같이 생성자에 넣어줘야 합니다.
10년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.

yongwhan
알고리즘 문제해결전략에 있는 풀이를 보고 코드를 작성하였는데 시간초과가 떠서 질문드립니다. 혹시 제가 잘못 작성한 부분이 있는지요? 참고로 책에서는 vector group을 const vector &group으로 작성했는데 그렇게 하면 다음과 같은 에러가 떠서 그렇게 못했습니다.
error: passing ‘const std::vector’ as ‘this’ argument of ‘std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = int; _Alloc = std::allocator]’ discards qualifiers [-fpermissive]
group=_group;
또 cin/cout을 scanf/printf로 바꾸었는데도 시간초과가 뜨네요..
해결책을 알려주세요. 감사합니다!
~~~ c++
#include
using namespace std;
struct Comparator { group; &_group, int _t) {
vector
int t;
Comparator(const vector
group=_group;
t=_t;
}
bool operator () (int a, int b) {
if(group[a]!=group[b]) return group[a]<group[b];
return group[a+t]<group[b+t];
}
};
vector getSuffixArray(const string &s) { group(n+1);
group[n]=-1; perm(n);
while(t
Comparator compareUsing2T(group, t); newGroup(n+1);
int n=s.size();
int t=1;
vector
for (int i=0; i
vector
for (int i=0; i
sort(perm.begin(), perm.end(), compareUsing2T);
t*=2;
if(t>=n) break;
vector
newGroup[n]=-1;
newGroup[perm[0]]=0;
for (int i=1; i<n; i++)
if(compareUsing2T(perm[i-1], perm[i]))
newGroup[perm[i]]=newGroup[perm[i-1]]+1;
else
newGroup[perm[i]]=newGroup[perm[i-1]];
group=newGroup;
}
return perm;
}
int commonPrefix(const string &s, int i, int j) {
int k=0;
while(i<s.size() && j<s.size() && s[i]==s[j]) {
i++; j++; k++;
}
return k;
}
int longestFrequent(int k, const string &s) { a=getSuffixArray(s);
vector
int ret=0;
for (int i=0; i+k<=s.size(); i++)
ret=max(ret, commonPrefix(s, a[i], a[i+k-1]));
return ret;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t; cin>>t;
while(t--) {
int k; string s; cin>>k>>s;
cout << longestFrequent(k,s) << endl;
}
return 0;
}
~~~
10년 전