zoukankan      html  css  js  c++  java
  • 洛谷 题解 P5595 【【XR-4】歌唱比赛】

    本蒟蒻又双叒叕被爆踩了。

    考试时一遍过

    其实这题还是很简单的,难度不会大于普及组T1.

    CSP 2019 RP++

    看开始看到题目,觉得特别长,不想看。。。

    我来和你们分析分析题目,你们就都可以秒了。

    首先,窝们有一个串,然后对于每个字符'X'表示小X赢了,'Y'表示小Y赢了,而'Z'表示平局。只要对于每个字符进行判断就行。

    比如:

    XYYYXXYZ
    
    第一个是'X',那么a[1]就要大于b[1];
    第二个是'Y',那么a[2]就要小于b[2];
    第三个是'Y',那么a[3]就要小于b[3];
    第四个是'Y',那么a[4]就要小于b[4];
    第五个是'X',那么a[5]就要大于b[5];
    第六个是'X',那么a[6]就要大于b[6];
    第七个是'Y',那么a[7]就要小于b[7];
    第一个是'X',那么a[1]就要等于b[8];
    

    这些都还很好理解,主要的是什么情况是无解的?

    因为它每次都会加入首个元素,

    所以,窝们看:

    然后在找到第一个'Z'前

    a[]:{1234}
    b[]:{4321}
    
    

    当前是'Z'的话:

    窝们要是x1234和x4321相等,你找到个看看

    这就是无解的状态。

    接下来就是代码时间:

    有注释的:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define maxn 1000010
    #define Rep(x, a, b) for(int x = a; x <= b; ++ x)
    
    bool flag;
    char ch[maxn];
    int b[maxn], a[maxn];//分别是读入的字符串,X的点赞数,Y的点赞数。
    
    int main(){
    scanf("%s", ch);//读入 
    int len = strlen(ch);//找到长度 
    Rep(i, 0, len - 1){
    if(ch[i] == 'X'){//如果小X当前领先,那这一位a[i]要大于b[i],因为有spj,所以我用的1,2 
    if(flag){//如果已经出现'Z' 
    printf("-1");//无解 
    return 0;
    }
    a[i] = 2;
    b[i] = 1;
    }
    else if(ch[i] == 'Y'){//如果是小Y领先也是一样的。 
    if(flag){//如果已经出现'Z' 
    printf("-1");//无解 
    return 0;
    }
    a[i] = 1;
    b[i] = 2;
    }
    else{//如果当前是'z',就把flag赋值为1; 
    flag = 1;
    a[i] = b[i] = 1;
    }
    }
    Rep(i, 0, len - 1) printf("%d", a[i]);//输出 
    printf("
    ");
    Rep(i, 0, len - 1) printf("%d", b[i]);//输出 
    return 0;
    }
    

    没注释的:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define maxn 1000010
    #define Rep(x, a, b) for(int x = a; x <= b; ++ x)
    
    bool flag;
    char ch[maxn], b[maxn], a[maxn];
    
    int main(){
    scanf("%s", ch); 
    int len = strlen(ch); 
    Rep(i, 0, len - 1){
    if(ch[i] == 'X'){ 
    if(flag){ 
    printf("-1"); 
    return 0;
    }
    a[i] = 2;
    b[i] = 1;
    }
    else if(ch[i] == 'Y'){ 
    if(flag){
    printf("-1");
    return 0;
    }
    a[i] = 1;
    b[i] = 2;
    }
    else flag = a[i] = b[i] = 1;
    }
    Rep(i, 0, len - 1) printf("%d", a[i]); 
    printf("
    ");
    Rep(i, 0, len - 1) printf("%d", b[i]);
    return 0;
    }
    

    PS:请看懂再抄

  • 相关阅读:
    CVE-2017-10271
    [GKCTF2020]cve版签到
    [GXYCTF2019]禁止套娃 无参数RCE
    [护网杯 2018]easy_tornado
    记两道xctf上的web进阶区 反序列化
    msf卸载win defender
    Cron表达式详解
    Linux ifconfig只有lo没有别的网络的问题
    记一道文件上传
    【解决】手机安卓已经导入burp证书,但仍提示此证书并非来自被信任的机构
  • 原文地址:https://www.cnblogs.com/Flash-plus/p/12028232.html
Copyright © 2011-2022 走看看