题意#
X 和 Y 各有一个权值 .
现在从最低位开始依次比较。
比如 ,:
- 首先比较最后一位,,Y 暂时领先。
- 再加上前一位,,X 暂时领先。
- 比较结束。
如果我们用 X
代表小 X 暂时领先,Y
代表小 Y 暂时领先,那么可以写下一个字符串 XY
。
再比如,,。
如果我们再用 Z
表示小 X 与小 Y 的点赞数暂时一样,那么写下的字符串应该为 XYZ
。
给定最后的字符串 ,请构造一种可能的 。
若不存在构造方案,输出 .
为了方便输出,用前导零补足位数。
对于 的数据,,。
XY
37
28
plaintextXYZ
137
047
plaintextZZZZZZ
000000
000000
plaintextXYZXYZ
-1
plaintext题解#
如果 不是连续的后缀,则无解。
否则用 构造即可。
const int MAXN = 1e6 + 10;
string s;
int a[MAXN], b[MAXN];
int main() {
cin >> s;
int n = s.length(), flag = 0;
for(int i = 0; i < n; i++) {
if(flag && s[i] != 'Z') {
cout << -1 << endl;
return 0;
}
if(s[i] == 'X') a[i] = 1, b[i] = 0;
else if(s[i] == 'Y') a[i] = 0, b[i] = 1;
else if(s[i] == 'Z') flag = 1;
}
for(int i = 0; i < n; i++) cout << a[i]; cout << endl;
for(int i = 0; i < n; i++) cout << b[i]; cout << endl;
return 0;
}
cpp