zoukankan      html  css  js  c++  java
  • Codeforces Round #657 (Div. 2)

    A. Acacius and String

    题意:?可以替换成任意字母,问能否让字符串中出现且仅出现一次abacaba

    。。。比较笨就打算写模拟了

    先找有没有原来有的标准串,如果有且数量大于1个的,不合法

                  有一个的,将?改为z,输出

                  没有,找能否操作让标准串出现且仅出现一次。

                        若有,输出。若无,不合法。

    string s,a,str="abacaba";
    int n,t;
    int judge(int x){
        string nn=s;
        int pos=0,cnt=0;
        for(int i=x;i<=x+6;++i,++pos)    nn[i]=str[pos];
        for(int i=0;i<n-6;++i){
            a=nn.substr(i,7);
            if(a==str)    cnt++;
        }
        if(cnt==1)    return 1;
        else        return 0;
    }
    int main(){
        scanf("%d",&t);
        while(t--){
            int cnt=0;
            scanf("%d",&n);
            cin>>s;
            for(int i=0;i<n-6;++i){
                a=s.substr(i,7);
                if(a==str)    cnt++;
            }
            if(cnt>1){
                printf("No
    ");
            }
            else if(cnt==1){
                printf("YES
    ");
                for(int i=0;i<n;++i){
                    if(s[i]=='?')    printf("z");
                    else    printf("%c",s[i]);
                }
                printf("
    ");
            }
            else{
                int ff=0,p; 
                for(int i=0;i<n-6;++i){
                    int flag=1,pos=0;
                    for(int j=i;j<=i+6;++j,++pos){
                        if(s[j]=='?')    continue;
                        else if(s[j]!=str[pos]){
                            flag=0;break;
                        }
                    }
                    if(flag){
                        if(judge(i)){
                            ff=1;p=i;
                            break;
                        }
                    }
                }
                if(!ff){
                    printf("No
    ");
                }
                else{
                    printf("YES
    ");
                    for(int i=0;i<n;++i){
                        if(i!=p){
                            if(s[i]=='?')    printf("z");
                            else    printf("%c",s[i]);
                        }
                        else{
                            cout<<str;
                            i+=6;
                        }
                    }
                    printf("
    ");
                }
            }
        }
        return 0;
    }

     B. Dubious Cyrpto

    题意:l≤a,b,c≤r  m=n*a+b-c,给定任意l,r,m,求n为正整数情况下abc的值

    由于abc的值都在1e5内,所以只能枚举a

    b-c看成余数,n看成方程解。

    这样做会出现一个问题,取余后b-c的值一定为正,但是n可能为0。

    此时就需要我们在b-c里手动减去一个a

    由于b、c范围内即可,所以依托l和r构造一下

    ll t,l,r,m,n,x;
    int main(){
        scanf("%lld",&t);
        while(t--){
            scanf("%lld%lld%lld",&l,&r,&m);
            for(int a=l;a<=r;++a){
                n=m/a;
                x=m%a;
                if(n>0&&x<=r-l&&x>=l-r){
                    cout<<a<<" "<<l+x<<" "<<l<<endl;
                    break;
                }
                else{
                    x-=a;
                    if(x>=l-r){
                        cout<<a<<" "<<r+x<<" "<<r<<endl;
                        break;
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    镜像转换:img转换为iso
    IDM的谷歌插件安装
    Adams和UG许可证冲突问题
    步进电机驱动总结
    比赛官网收集
    树莓派安装pip包管理工具
    光固化打印后处理过程
    Arduino 串口库函数
    六足蜘蛛机器人行走控制
    温湿度传感器DHT11程序示例
  • 原文地址:https://www.cnblogs.com/PdrEam/p/13946053.html
Copyright © 2011-2022 走看看