洛谷 P5595 歌唱比賽

薛定谔的AC發表於2024-06-16

題目連結:歌唱比賽



思路

根據題目分析可得,假如小x的點贊數是123111,小y的點贊數是234111,則字串的第4為到第6位結果都為Z,分別為對比(111,111),(11,11),(1,1),字串的第三位為Y,為對比(3111,4111),則結果字串為YYYZZZ。
此時可以輕易判斷出字串中第一個Z後面的所有字母都是Z,所以當出現X和Y之前有Z的時候肯定無法構造出小x和小y對應的點贊數,此時需要輸出-1,其他情況簡單判斷當前字串元素為X時,則說明小x的字尾數字大於小y的字尾數字,此時令小x的當前數位為2,小y的當前數位為1,當前字串元素為Y時,小y的當前數位為2,小x的當前數位為1,當前為X時,兩個人的當前數位都為1。


程式碼

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int x[N], y[N], ansx, ansy, flag;
int main() {
  string s;
  cin >> s;

  int len = s.length();
  for (int i = len - 1; i >= 0; i--) {
    if (s[i] == 'X') {
      ansx++;
      x[i] = 2;
      y[i] = 1;
    } else if (s[i] == 'Y') {
      ansy++;
      x[i] = 1;
      y[i] = 2;
    } else {
      x[i] = 1;
      y[i] = 1;
      if (ansx || ansy) {
        flag = 1;
        break;
      }
    }
  }
  
  if (flag) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < len; i++) {
    cout << x[i];
  }
  cout << endl;
  for (int i = 0; i < len; i++) {
    cout << y[i];
  }
  return 0;
}