Л Гу P5595 [XR-4] пение конкурс

портал

Идей && Code

Это популярный - тем

Таким образом, есть вопрос и вопрос очень похожи, вы можете сделать этот вопрос, вернуться, чтобы сделать это, ссылка:

\ (P3742 \ Umi \) функция

Затем мы рассмотрим практику решения проблемы

Так как \ (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;
}

рекомендация

отwww.cnblogs.com/loceaner/p/11711331.html