zoukankan      html  css  js  c++  java
  • CF1178E Archaeology

    codeforces

    考虑只有三个字符,所以每四个必然选出两个来,也就是不存在( m impossible)的情况

    所以我们简单模拟就好了,从两端往中间扫,不匹配就移动一端,时间复杂度(O(n))

    代码:

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    using namespace std;
    #define rg register
    void read(int &x){
        char ch;bool ok;
        for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;
        for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;
    }
    const int maxn=1e6+10;
    char a[maxn],ans[maxn];int n,m,mx,sum;
    int pos[maxn],tot,w[3],s[3];
    int main(){
        scanf("%s",a+1),n=strlen(a+1);m=n/2;
        if(n==2)return printf("%c",a[1]),0;
        int l=1,r=n;
        while(l<r){
    	if(a[l]==a[r])ans[++sum]=a[l],pos[sum]=l,l++,r--;
    	else {
    	    if(a[l+1]==a[r]&&l+1<r)ans[++sum]=a[l+1],pos[sum]=l+1,l+=2,r--;
    	    else if(a[l]==a[r-1]&&l<r-1)ans[++sum]=a[l],pos[sum]=l,l++,r-=2;
    	    else l++,r--;
    	}
        }
        l=pos[sum]+1;
        for(rg int i=1;i<=sum;i++)printf("%c",ans[i]);
        if(a[l]!=ans[sum])printf("%c",a[l]);
        for(rg int i=sum;i;i--)printf("%c",ans[i]);
    }
    
  • 相关阅读:
    区块链开发之Corda训练营笔记12:Flow习题答案
    区块链开发之Corda训练营笔记11:Flow代码演示
    gitolite的部署
    python操作redis
    python多进程
    mysql索引
    mysql事务
    mysql外键
    mysql联合查询
    python常用模块之re模块(正则)
  • 原文地址:https://www.cnblogs.com/lcxer/p/11400976.html
Copyright © 2011-2022 走看看