1 条题解

  • 0
    @ 2025-8-24 22:12:20

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Fatalis_Lights
    『 Delightful. 』

    搬运于2025-08-24 22:12:20,当前版本为作者最后更新于2019-10-27 21:13:42,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Solution

    拿到这个题,不要被它吓到了。仔细分析一下,你就知道如何处理了。

    第一种情况:只有X,Y。

    那么如果是X,就输出1,Y则为0。

    sample input: XY
    sample output: 10 01
    

    如果有解且有Z,则有Z的位置为1。

    sample input: XYZ
    sample output: 101 011
    

    如果无解,那么就是说Z和XY冲突了。

    首先,如果其中一位是Z,则Z后的所有位置都为Z。

    sample input: XYZZ
    sample output: 1011 0111
    

    如果不是Z,比如下面这个:

    sample input: XYZXZ
    sample output: -1
    

    直接输出"-1"。

    那么这个题就解决了。

    code:

    #include<bits/stdc++.h>
    #define N 1000006
    using namespace std;
    
    string s;
    int a[N],b[N];
    
    bool pd(string s){
    	bool flag=0;
    	for(int i=0;i<s.size();i++){
    		if(s[i]=='Z') flag=1;
    		if(flag==1 && s[i]!='Z') return 1; 
    	}
    	return 0;
    } //一位一位判断Z
    
    int main(){
    	cin>>s;
    	if(pd(s)) return puts("-1"), 0; //无解输出-1
    	for(int i=0;i<s.size();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;
    	for(int i=0;i<s.size();i++) cout<<a[i]; cout<<endl; //输出是有换行的
    	for(int i=0;i<s.size();i++) cout<<b[i]; cout<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    4591
    时间
    1000ms
    内存
    500MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者