1 条题解
-
0
正解是后缀数组(SA),这里充分发扬人类智慧,用排序做法。简单说就是把原字符串进行排序,然后对于每个字符找到原字符串的前一个,组成字符串输出就可以了。 下面是
你们喜欢的code:#include<bits/stdc++.h> using namespace std; int n,a[200005]; char s[200005]; bool cmp(int x,int y){ int i = x,j = y,k = 0; while(s[i] == s[j] && k < 50){ i++,j++,k++; } return s[i] < s[j]; } int main(){ ios::sync_with_stdio(0),cin.tie(0); cin >> s,n = strlen(s); for(int i = 0;i < n;i++){ a[i] = i,s[n + i] = s[i]; } sort(a,a + n,cmp); for(int i = 0;i < n;i++){ cout << s[a[i] ? a[i] - 1 : n - 1]; } return 0; }
- 1
信息
- ID
- 3029
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 8
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者