портал
Идей && Code
Это популярный - тем
Таким образом, есть вопрос и вопрос очень похожи, вы можете сделать этот вопрос, вернуться, чтобы сделать это, ссылка:
Затем мы рассмотрим практику решения проблемы
Так как \ (Special \ Судите \) , мы можем непосредственно трахает вверх, только \ (0 \) и \ (1 \) два числа, мы можем \ (A \) из него друзей ~ ~
В самом деле, первая вещь, чтобы получить испытуемые немножко невежественных силы, и тогда вы найдете не трудно читать, можно легко придумать идею: подметать спереди назад, на этот раз , если символ \ (X \) , пусть \ (X \) число это одно , чем \ (Y \) большой , если в это время символы \ (Y \) , пусть \ (Y \) , что это число бит , чем \ (X \) большой , если в это время символы \ (щееся \) , то пусть \ (X \) и \ (Y \) этот бит два числа равны
Идея просто не совершенен
Тогда я ликование ситуации должен заплатить, \ (74 \) точки
Почему? ? Потому что нет никакого суждения без решения, я забыл есть примеры \ (4 \) , что ни одно решение, это не место , где я большинство блюд ......
Тогда мы посмотрим на то, что такая ситуация не считается ни одно решение
На самом деле, это также более очевидным, как в следующем случае \ (XXXZZYYZ \) , если есть фронт \ (щееся \) , а не за \ (щееся \) , но затем появился \ (щееся \) , является решения нет, то почему? Так, в соответствии со значением задач, \ (Z \) , представленных в: от \ (\ Z) этого все числа равны позади самого начала , что далеко \ (Х \) и \ (Y \) два одинаковых номера. Если фронт с \ (щееся \) , в то время как в середине наблюдается \ (X \) или \ (у- \) , очевидно , неправильно, поэтому мы можем первым \ (О (п) \) , чтобы определить , что не будет не будет никакого решения ситуации следующим образом
for(int i = 1; i <= len; i++) {
if(s[i] == 'Z') now = 1;//now表示有没有Z
if(s[i] != 'Z' && now) return cout << "-1\n", 0;
//如果从前往后扫,已经出现了Z,后面就不能再出现X或Y,如果出现,即是无解
}
Затем законченный, полный код выглядит следующим образом
/*
By:Loceaner
*/
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
inline int read() {
char c = getchar();
int x = 0, f = 1;
for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
return x * f;
}
const int N = 1e6 + 11;
char s[N], a[N], b[N];
int now;
int main() {
scanf("%s", s + 1);
int len = strlen(s + 1);
for(int i = 1; i <= len; i++) {
if(s[i] == 'Z') now = 1;
if(s[i] != 'Z' && now) return cout << "-1\n", 0;
}
for(int i = 1; i <= len; i++) {
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') a[i] = '1', b[i] = '1';
}
printf("%s\n%s", a + 1, b + 1);
return 0;
}