2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N = 1110000; char s1[N], s2[N]; int n; int get_min(char *s) { int i = 0, j = 1; while (i < n && j < n) { int k = 0; while (k < n && s[i + k] == s[j + k]) k++; if (k == n) break; if (s[i + k] > s[j + k]) i = i + k + 1; else j = j + k + 1; if (i == j) j++; } int p = min(i, j); s[p + n] = '\0'; return p; } int main() { scanf("%s%s", s1, s2); n = strlen(s1); memcpy(s1 + n, s1, n); memcpy(s2 + n, s2, n); int i1 = get_min(s1), i2 = get_min(s2); if (strcmp(s1 + i1, s2 + i2)) puts("No"); else puts("Yes"), puts(s1 + i1); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=1110000; char s1[N],s2[N];int n; int get_min(char *s) { int i=0,j=1; while(i<n && j<n) { int k=0;while(k<n && s[i+k]==s[j+k]) k++; if(k==n) break; if(s[i+k]>s[j+k])i=i+k+1;else j=j+k+1; if(i==j)j++; } int p=min(i,j); s[p+n]='\0'; return p; } int main() { scanf("%s%s",s1,s2); n=strlen(s1); memcpy(s1+n,s1,n); memcpy(s2+n,s2,n); int i1=get_min(s1),i2=get_min(s2); if( strcmp(s1+i1,s2+i2) ) puts("No"); else puts("Yes"),puts(s1+i1); return 0; }
- 1
信息
- ID
- 1301
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 170
- 已通过
- 56
- 上传者