P5595 【XR-4】歌唱比赛-构造+思维

【XR-4】歌唱比赛

题目描述

小 X 参加了一场歌唱比赛。

经过一路鏖战,小 X 终于挺进了决赛,他的对手是小 Y。

这场歌唱比赛的冠军是由点赞数决定的,谁的点赞数高,谁就能夺冠。

小 X 和小 Y 依次演唱完自己的最后一首歌曲后,他们最终的点赞数确定了下来。

揭晓冠军的时刻终于到来了,主持人为了增加悬念,决定从小 X 与小 Y 的点赞数的最后一位开始,依次比较。

比如,小 X 的点赞数是 37 37 37,小 Y 的点赞数是 28 28 28。首先比较最后一位,小 X 是 7 7 7,小 Y 是 8 8 8,此时小 Y 暂时领先。再加上前一位,小 X 是 37 37 37,小 Y 是 28 28 28,此时小 X 暂时领先。比较结束,如果我们用 X 代表小 X 暂时领先,Y 代表小 Y 暂时领先,那么可以写下一个字符串 XY

再比如,小 X 的点赞数是 137 137 137,小 Y 的点赞数是 47 47 47。如果我们再用 Z 表示小 X 与小 Y 的点赞数暂时一样,那么写下的字符串应该为 XYZ

你作为一个精通 OI 的神仙,自然知道这种比较方式是非常不科学的,这样只是在无端拖延时间罢了,但是你却对最后写下的这个字符串很感兴趣。

现在,你得到了这个最后写下的字符串,你需要构造出一种可能的小 X 与小 Y 的点赞数。

当然,有可能不存在任何一种情况的点赞数满足这个字符串,那么你只需要输出 -1 即可。

为了方便你输出,请用前导零来补足位数。

输入格式

一行一个字符串 s s s,表示最后写下的字符串。

输出格式

如果有解:

  • 第一行一个整数,表示小 X 的点赞数。
  • 第二行一个整数,表示小 Y 的点赞数。

如果无解:

  • 一行一个整数 -1

样例 #1

样例输入 #1

XY

样例输出 #1

37
28

样例 #2

样例输入 #2

XYZ

样例输出 #2

137
047

样例 #3

样例输入 #3

ZZZZZZ

样例输出 #3

000000
000000

样例 #4

样例输入 #4

XYZXYZ

样例输出 #4

-1
#include <bits/stdc++.h>
using namespace std;
#define de(x) cout<<x<<" ";
#define Pu puts("");
#define sf(x) scanf("%d",&x);
typedef long long ll;
const int N=1e6+10,mod=100003;
const int inf=0x3f3f3f3f;
int a[N],b[N];
int n,m,ans;
char s[N];
int fun(){
    for(int i=0;i<n;i++){
        if(s[i]=='Z'){
            int j=i;
            while(j<n){
                if(s[j]!='Z') return 0;
                j++;
            }
           break;
        }
    }
    return 1;
}
int main(){
    scanf("%s",s);
    n=strlen(s);
    ans=fun();
    if(ans==0){
        printf("-1\n");
        return 0;
    }
    for(int i=n-1;i>=0;i--){
        if(s[i]=='Z'){
            a[i]=b[i]=1;
        }else if(s[i]=='X'){
            a[i]=2;
            b[i]=1;
        }else{
            a[i]=1;
            b[i]=2;
        }
    }
    for(int i=0;i<n;i++){
        printf("%d",a[i]);
    }Pu
    for(int i=0;i<n;i++){
        printf("%d",b[i]);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值