zoukankan      html  css  js  c++  java
  • AtCoder Grand Contest 011D(思维,规律,异或)

    #include<bits/stdc++.h>
    using namespace std;
    char s[200007];
    int ans[200007];
    int main(){
        int n,k;
        int i=0,j=0,l=0;
        scanf("%d%d",&n,&k);
        scanf("%s",s+1);
        for(i=1;i<=n;i++)
            if(s[i]=='A')
                ans[i]=1;
        int tmp=0;
        for(i=1,j=1;i<=k&&j<=n;i++){
            if(ans[j]^tmp){//如果这一位经历异或之后变为了1需要再变一次把它变成0,因为这一位终将变成相当于这一步的开头第一位
                ans[j]^=1;//将它变成0
                continue;
            }
            tmp^=1;//变化异或标记
            j++;//进入下一位
        }
        if(i>=k+1){//k太小以至于前面还有剩余没有变为最终形态
            for(l=j;l<=n;l++)
                if(ans[l]^tmp)//后面的位数根据奇偶性进行变化
                    printf("A");
                else
                    printf("B");
            for(l=n+1;l<=n+j-1;l++)//最后面是找出的规律
                if((n+j-l)&1)
                    printf("A");
                else
                    printf("B");
        }
        else{
            if(n&1){//奇数则判断开头剩余是规律
                if((k-i+2)&1)
                    printf("A");
                else
                    printf("B");
                for(l=2;l<=n;l++)
                    if(l&1)
                        printf("A");
                    else
                        printf("B");
            }
            else
                for(l=1;l<=n;l++)
                    if((l+1)&1)
                        printf("A");
                    else
                        printf("B");
        }
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    一个从excel导入数据错位问题
    Chrome F12 温故而知新 :因为重定向导致清空Network信息
    export / import 温故而知新
    Chrome Debugger 温故而知新:上下文环境
    微信导出表情包教程
    Oracle中判断字段是否为数字
    获取GridView中RowCommand的当前索引行
    Oracle SQL常用内置系统函数总结
    使用Task代替ThreadPool和Thread
    Visual Studio 使用及调试必知必会
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10459551.html
Copyright © 2011-2022 走看看