洛谷 P5595 歌唱比赛

题目链接:歌唱比赛



思路

       根据题目分析可得,假如小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;
}
posted @ 2024-06-16 12:24  薛定谔的AC  阅读(5)  评论(0编辑  收藏  举报